加入一个阵列的每一个项目与另一个数组的项目

问题描述:

考虑一下:加入一个阵列的每一个项目与另一个数组的项目

[ ["a", "b"], ["c", "d"], ["e"] ] 

这怎么可能tranformed到:

[ "a c e", "a d e", "b c e", "b d e" ] 

//编辑:已测试并正常工作

function product(set) { 
    if(set.length < 2) 
     return set[0]; 
    var head = set.shift(), p = product(set), r = []; 
    for(var j = 0; j < head.length; j++) 
     for(var i = 0; i < p.length; i++) 
      r.push([head[j]].concat(p[i])); 
    return r; 
} 

var set = [ 
    [ "a", "b", "c"], 
    [ "D", "E" ], 
    [ "x" ] 
]; 

var p = product(set); 
for(var i = 0; i < p.length; i++) 
    document.write(p[i] + "<br>"); 
+0

非常感谢你!我知道我必须在某个地方缓解压力,但却找不到这种模式。 – 2009-10-29 08:11:46

+0

此代码不会运行:它缺少)在两个地方。 – 2009-10-29 08:15:17

尝试concat方法:

var newArr=[]; 

for(var i=0; i< arr.length; i++) 
{ 
    newArr = newArr.concat(arr[i]); 
} 
+0

将只是生产[ “A”, “B”, “C”, “d”, “E”]你想 – 2009-10-29 07:54:09

+0

对不起我的错,我没有看到输出:)程序员的症状。 – TheVillageIdiot 2009-10-29 10:06:18

这工作:

<html><body><script> 
var to_join = [ ["a", "b"], ["c", "d"], ["e"] ]; 
var joined = to_join[0]; 
for (var i = 1; i < to_join.length; i++) { 
    var next = new Array(); 
    var ends = to_join[i]; 
    for (var j = 0; j < ends.length; j++) { 
     for (var k = 0; k < joined.length; k++) { 
      next.push (joined[k]+ " " + (ends[j])); 
     } 
    } 
    joined = next; 
} 
alert (joined); 
</script></body></html> 
+0

如果关闭了身体标签,它会更好用;] – 2009-10-29 13:04:20

+0

谢谢您的更正。 – 2009-10-29 13:38:42