我有以下几个数组重叠的数组:
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]);
}
答案 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()不会更改原点数组,只返回结果的新数组