使用forEach合并数组

8

我有两个由20个对象数组组成的数组。就像这样:

var array1 = [
  [
    {'x':0,'y':0},
    {'x':0,'y':0}
  ],
  [
    {'x':1,'y':1},
    {'x':1,'y':1}
  ],
...
  [
    {'x':19,'y':19},
    {'x':19,'y':19}
  ]
];

var array2 = [
  [
    {'x':0,'y':0},
    {'x':0,'y':0}
  ],
  [
    {'x':1,'y':1},
    {'x':1,'y':1}
  ],
...
  [
    {'x':19,'y':19},
    {'x':19,'y':19}
  ]
];

我希望最终结果是:

[
    [
    {'x':0,'y':0},
    {'x':0,'y':0},
    {'x':0,'y':0},
    {'x':0,'y':0}
    ],
...
];

因此,我将每个数组中附加了两个项目,这意味着现在每个数组应包含四个对象。

我尝试的是:

      var array3 = array1;

      array3.forEach(function(item,i) {
         item.concat(array2[i])
      })

问题

有没有一种更简便的方法迭代拼接项目?

但是什么也没有被添加。

4个回答

11

这是一个相当典型的“zip”操作,可以使用map来完成。

var array1 = [
  [
    {'x':0,'y':0},
    {'x':0,'y':0}
  ],
  [
    {'x':1,'y':1},
    {'x':1,'y':1}
  ],
  [
    {'x':19,'y':19},
    {'x':19,'y':19}
  ]
];

var array2 = [
  [
    {'x':0,'y':0},
    {'x':0,'y':0}
  ],
  [
    {'x':1,'y':1},
    {'x':1,'y':1}
  ],
  [
    {'x':19,'y':19},
    {'x':19,'y':19}
  ]
];

var result = array1.map( (item,i) => item.concat(array2[i]));
console.log(result);


9

Array.concat() 不会对原始数组进行更改,这意味着它会创建一个新的数组实例。

因此,您需要将连接后的数组分配给原始值。

  var array3 = array1;

  // If you don't want to mutate 'array1, use spread operator like following:
  // var array3 = [...array1];

  array3.forEach(function(item,i) {
     array3[i] = item.concat(array2[i])
  })

1
这将会改变 array1 - adiga
@adiga 你说得完全正确。已经相应地更新了答案。 - Harun Yilmaz

5
这个怎么样?
var array3 = array1.map((a, idx) => [...a, ...array2[idx]] )

请不要仅仅发布代码,还要解释它正在做什么,并给出提示以更好地理解它,例如:“扩展运算符”。 - k0pernikus

5
如果您分配var array3 = array1并改变array3,那么它也会改变array1,因为它们都引用同一个数组。
您可以对第一个数组进行map操作,并基于索引使用array2连接每个内部数组。
const array3 = array1.map((o, i) => o.concat(array2[i]))

或者在 ES5 中:

var array3 = array1.map(function(o, i) {
  return o.concat(array2[i])
})

const array1=[[{x:0,y:0},{x:0,y:0}],[{x:1,y:1},{x:1,y:1}],[{x:19,y:19},{x:19,y:19}]],
    array2=[[{x:0,y:0},{x:0,y:0}],[{x:1,y:1},{x:1,y:1}],[{x:19,y:19},{x:19,y:19}]];

const array3 = array1.map((o, i) => o.concat(array2[i]))

console.log(array3)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接