示例1:求两个数组笛卡尔积
假如有两个数组,求笛卡尔积,其基本思路是这样的:
在遍历一个数组的同时,遍历另一个数组,然后把元素拼接,放到新数组。
/*方式一:两个数组求笛卡尔积*/
var arr1 = ["1","2","3"];
var arr2 = ["a","b","c"];
const arr =[];
/* 在遍历一个数组的同时,遍历另一个数组,然后把元素拼接,放到新数组。*/
arr1.forEach(param1 =>{
arr2.forEach(param2 =>{
arr.push(param1+"_"+param2);
});
});
console.log(arr);
示例2:求多个数组笛卡尔积
使用reduce函数:
reduce(callback,initvalue)
callback:是一个回调函数。这个callback可以接收2个参数:arg1,arg2
arg1代表的上次运算得到的结果
arg2是数组中正要处理的元素
initvalue,初始化值。第一次调用callback时把initvalue作为第一个参数,把数组的第一个元素作为第二个参数运
算。如果未指定,则第一次运算会把数组的前两个元素作为参数。
reduce会把数组中的元素逐个用这个函数处理,然后把结果作为下一次回调函数的第一个参数,数组下个元素作为
第二个参数,以此类推。
/*方式二:多个数组求笛卡尔积*/
var array1 = ["1", "2"];
var array2 = ["a", "b"];
var array3 = ["@", "*"];
// 作为二维数组来运算
var array4 = [array1, array2, array3];
// last为上次运算的结果,current为数组中的当前元素
var result = array4.reduce((last, current) => {
const array = [];
last.forEach(par1 => {
current.forEach(par2 => {
array.push(par1 + "_" + par2);
});
});
return array;
});
console.log(result);