const a = [1,2,3]
const b = ["a","b","c"]
const c =["z","y"]
const d =["*","^","%"]
如求以上四个数组(或更多)的笛卡尔积,思路是先将第一个数组作为结果, 再通过该结果与第二个数组交叉,得到的结果再与第三个数组交叉,依此直到与最后一个数组交叉完成。
此算法可以通过递归或循环实现,因为递归会消耗栈空间,深度越大消耗越大,甚至导致内存溢出,所以我选用的循环实现。
function x(){
const a = [1,2,3]
const b = ["a","b","c"]
const c =["z","y"]
const d =["*","^","%"]
const t =[a,b,c,d]
let result=[]
for(let i=0;i<t[0].length;i++)
result.push([t[0][i]])
console.log(result,"初始化Result")
for(let j=0;j<t.length;j++){
let nextIndex = j+1
if(nextIndex>=t.length)
continue
let temp=[]
for(let k=0; k<result.length;k++){
for(let l=0;l<t[nextIndex].length;l++){
temp.push(result[k].concat(t[nextIndex][l]))
}
}
result = temp
console.log(result,`第${j+1}次结果:`,result.length+"条")
}
}
x()