任何人都可以帮我从现有阵列生成一个新阵列。这是我的数组(样本)
[
1,
2,
[3,4],
9
[5,6],
[7,8]
]
这就是我想要实现的目标
[
[1,2,3,9,5,7],
[1,2,4,9,5,7],
[1,2,3,9,6,7],
[1,2,4,9,6,7],
[1,2,3,9,5,8],
[1,2,4,9,5,8],
[1,2,3,9,6,8],
[1,2,4,9,6,8]
]
由于
编辑 因为我想要嵌套数组的正确组合。我不认为this question会有所帮助。
答案 0 :(得分:1)
这看起来像Cartesian product所以你可以为它创建递归函数。
var data = [ 1, 2, [3,4], 9, [5,6], [7,8] ];
function convert(data, n = 0, c = [], r = []) {
if(n == data.length) return r.push(c.slice());
let el = Array.isArray(data[n]) ? data[n] : [data[n]]
for(var i = 0; i < el.length; i++) {
c[n] = el[i];
convert(data, n + 1, c, r);
}
return r;
}
console.log(JSON.stringify(convert(data)))
&#13;
答案 1 :(得分:1)
另一种方法是从数据中的第一个元素创建第一个元素,然后在reduce()
var data = [1, 2, [3, 4], 9, [5, 6], [7, 8]];
const base = data.map(e => Array.isArray(e) ? e[0] : e);
const res = data.reduce((a, el, dIdx) => {
if (Array.isArray(el)) {
let newArrs = el.slice(1).map(nVal => {
return [...a.map(arr => arr.map((val, i) => i === dIdx ? nVal : val))];
})
return a.concat(...newArrs)
}
return a;
}, [base]);
console.log(JSON.stringify(res))