将数组与数组结合在一起

时间:2015-04-18 04:32:29

标签: javascript arrays node.js

我有以下几个数组重叠的数组:

arr1 = [[a,b], [c,d], [e,f], [g, h]]
arr2 = [[a, 1, 2, 3], [c, 4, 5, 6], [e, 7, 8, 9], [g, 10, 11, 12]]

我怎样才能到达

arr1 = [[a, b, 1, 2, 3], [c, d, 4, 5, 6], [e, f, 7, 8, 9], [g, h, 10, 11, 12]]

我试过循环这个并使用splice,split,concat但是我遇到了一些逻辑问题。提前谢谢。

这是我在哪里的想法(这已经从上一个版本稍微修改了一点接近工作):

    for(var x = 0; x <arr2.length; x++){

         arr1[x] = arr2[x][0].split(" ");

      //   arr1 = arr1[x].concat(2,0,arr2[x+1]); 
    }

2 个答案:

答案 0 :(得分:3)

使用ES5,您现在可以使用forEach方法:

arr2.forEach(function(item, index) {
   arr1[index] = arr1[index].concat(item.splice(1));
});

或者,您可以使用更传统的for循环:

for(var i=0, len=arr2.length; i<len; i+=1) {
    arr1[i] = arr1[i].concat(arr2[i].splice(1));
}

(两者中,splice(1)是因为看起来你只想连接第一个项目之后的元素)

答案 1 :(得分:0)

如果我理解你的问题,代码可能是这样的:

arr1 = [[a,b], [c,d], [e,f], [g, h]]
arr2 = [[a, 1, 2, 3], [c, 4, 5, 6], [e, 7, 8, 9], [g, 10, 11, 12]]


function combin(head, source) {
    var result = [];
    head.map(function (h) {               // iterate arr1 elements
        source.map(function (s) {              // iterate arr2 elements
            if(h[0] == s[0]){
                s.shift();                     // remove the first element
                result.push(h.concat(s));      // concat the array
            }
        });
    });

    return result;
}
console.log(combin(arr1, arr2));

提示:

  • shift()将更改原点数组

  • concat()不会更改原点数组,只返回结果的新数组