我目前陷在这个问题上,
假设有一个数组arr4(长度不固定).
我需要找到其元素的所有组合.
预期输出为:
4-16D-5d
4-16D-5e
4A-16D-5d
4A-16D-5e
4B-16D-5d
4B-16D-5e
4-15D-5d
4-15D-5e
4A-15D-5d
4A-15D-5e
4B-15D-5d
4B-15D-5e
我试过的是:
arr4=[['4','4A','4B'],['16D','15D'],['5d','5e']]; //may contains more elements
alert("arr4 "+arr4);
for(var k=0;k<arr4.length;k++){
alert("k "+k);
arr_v=arr4[k]
alert("arrv"+arr_v);
alert ("arrv lengt"+arr_v.length);
for(var z=0;z<arr_v.length;z++){
m=1;
while(m<arr4.length){
var test=arr4[m];
for(var n=0;n<test.length;n++)
alert(arr_v[z]+"<TEST>"+test[n]);
}
m++;
}
}
我有点找到解决方案:
function product() {
return Array.prototype.reduce.call(arguments, function(as, bs) {
return [a.concat(b) for each (a in as) for each (b in bs)]
}, [[]]);
}
但
arr4=[['4','4A','4B'],['16D','15D'],['5d','5e']];
alert(product(['4','4A','4B'],['16D','15D'],['5d','5e']);
以上有效,但以下无效:
arr4=[['4','4A','4B'],['16D','15D'],['5d','5e']];
alert(product(arr4);
任何人请提出解决方案
编辑:解决方案here
解决方法:
您可以计算每个子数组的笛卡尔积.查看this question and its answer
我尝试了一下,由于它超出了每个数组的长度,所以不管每个列表中有多少个元素,它都应该起作用,并为您返回每个产品的列表.