我有一个数组,例如['PP', 'PT', 'CK']。我有一个数字n,例如4。我想生成所有数组项的组合,直到4,因此输出将包含所有组合。
我尝试编写以下代码,但它没有给我期望的输出。
[['PP', 'PP', 'PP', 'PP'],
['PP', 'PP', 'PP', 'PT'],
['PP', 'PP', 'PT', 'PT'],
['PP', 'PT', 'PT', 'PT'],
['PT', 'PT', 'PT', 'PT'],
['PP', 'PP', 'PP', 'CK'],
['PP', 'PP', 'CK', 'CK'],
['PP, 'CK', 'CK', 'CK'],
['CK', 'CK', 'CK', 'CK'],
['PT', 'CK', 'CK', 'PP'],
['PT', 'PT', 'CK', 'PP],
['PT', 'PT', 'PT', 'CK']]
我尝试编写以下代码,但它没有给我期望的输出。
const getCombination = (arr, n) => {
const list = [];
if (arr.length === 1) {
const items = [];
for (let t = 0; t < n; t++) {
items.push(arr[0]);
}
list.push(items);
return list;
}
for (let i = n; i >= 0; i--) {
let k = i;
const items = [];
while (k > 0) {
items.push(arr[0]);
k--;
}
if (i === n) {
list.push(items);
continue;
}
let c = n - i;
let val = 1;
if (i === 0) {
val = 0;
}
for (let j = val; j < arr.length; j++) {
const op = [...items];
const l = arr[j];
let p = 0;
let isRun = false;
if (j === 0) {
continue;
}
while (p < c && items.length < n) {
op.push(l);
p++;
isRun = true;
}
if (isRun) list.push(op);
}
}
return list;
}
console.log("list", getCombination(["PP", "PT", "CK"], 4));