【Daily Interview】- 02 求二维数组的全排列组合结果

273 阅读1分钟

!! 说在前面的:本题目来源于京城一灯,已经过对方同意方分享记录

先来看看题目吧:

分析

上面这道题,我们可以将问题拆解,依次将临近的两个数组进行组合,然后向后遍历组合,大致如图所示:

而能实现上述效果的,第一时间应该能够想到 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:求二维数组的全排列组合结果