说明
一个数组有三个子项,每一个子项的每一项和其他子项的每一项进行排列组合,得到的每一种组合再放进一个数组里
[
[{'A':'A'},{'B':'B'}],
[{'a':'a'},{'b':'b'}],
[{'1':'1'}, {'2':'2'}],
]
需要得到的是[
[ { A: 'A' }, { a: 'a' }, { '1': '1' } ],
[ { A: 'A' }, { a: 'a' }, { '2': '2' } ],
[ { A: 'A' }, { b: 'b' }, { '1': '1' } ],
[ { A: 'A' }, { b: 'b' }, { '2': '2' } ],
[ { B: 'B' }, { a: 'a' }, { '1': '1' } ],
[ { B: 'B' }, { a: 'a' }, { '2': '2' } ],
[ { B: 'B' }, { b: 'b' }, { '1': '1' } ],
[ { B: 'B' }, { b: 'b' }, { '2': '2' } ]
]
函数封装
function permutate(arr) {
if (arr.length === 1) {
return arr[0].map((item) => [item]);
}
let res = arr[0].slice();
for (let i = 1; i < arr.length; i++) {
const pre = res.slice();
res = [];
pre.forEach((item) => {
arr[i].forEach((curr) => {
if (Object.prototype.toString.call(item) === "[object Object]") {
res.push([item, curr]);
} else {
res.push([...item, curr]);
}
});
});
}
return res;
}
情况一(特殊情况)
let arr = [[{ A: "A" }, { B: "B" }]];
let result = permutate(arr);
console.log(result);
情况二
let arr = [[{'A':'A'},{'B':'B'}], [{'a':'a'},{'b':'b'}], [{'1':'1'}, {'2':'2'}]]
let result = permutate(arr)
console.log(result);
[ { A: 'A' }, { a: 'a' }, { '1': '1' } ],
[ { A: 'A' }, { a: 'a' }, { '2': '2' } ],
[ { A: 'A' }, { b: 'b' }, { '1': '1' } ],
[ { A: 'A' }, { b: 'b' }, { '2': '2' } ],
[ { B: 'B' }, { a: 'a' }, { '1': '1' } ],
[ { B: 'B' }, { a: 'a' }, { '2': '2' } ],
[ { B: 'B' }, { b: 'b' }, { '1': '1' } ],
[ { B: 'B' }, { b: 'b' }, { '2': '2' } ]
]