实现数组笛卡尔积

使用 reduce 和 map 计算两个数组的笛卡尔积

问题

实现一个 product 方法,计算两个数组的笛卡尔积。

product([1, 2], [3, 4]) 
// 期望输出: [[1, 3], [1, 4], [2, 3], [2, 4]]

解答

function product(xList: number[], yList: number[]): [number, number][] {
  return xList.reduce((v, t) => {
    return v.concat(yList.map((item) => [t, item]));
  }, [] as [number, number][]);
}

实现思路:遍历第一个数组的每个元素,将其与第二个数组的所有元素组合,最后合并所有结果。

关键点

  • 使用 reduce 遍历第一个数组,累积结果
  • 使用 map 将当前元素与第二个数组的每个元素配对
  • 使用 concat 合并每次迭代的结果数组
  • 初始值设为空数组,并指定类型 [] as [number, number][]