!! 说在前面的:本题目来源于京城一灯,已经过对方同意方分享记录
先来看看题目吧:
分析
上面这道题,我们可以将问题拆解,依次将临近的两个数组进行组合,然后向后遍历组合,大致如图所示:
而能实现上述效果的,第一时间应该能够想到 Array.reduce:
const getResult = (arr1, arr2) => {
if (!Array.isArray(arr1) || !Array.isArray(arr2)) {
return;
}
if (!arr1.length) {
return arr2;
}
if (!arr2.length) {
return arr1;
}
const result = [];
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
result.push(String(arr1[i]) + String(arr2[j]));
}
}
return result;
};
const findAll = arr => arr.reduce((total, current) => getResult(total, current), []);
最终效果如下:
感兴趣的读者可以看看在线 demo:求二维数组的全排列组合结果