实现数组笛卡尔积
使用 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][]
目录