使用嵌套的forEach循环来推送和对象到数组

cou*_*ing 3 javascript ecmascript-6

我想解释为什么这个函数的结果与我的期望不符.

const numbers = [ 1, 2 ]
const objects = [{f: 'a'}, {f: 'b'}]

async function(domain) {
  let matrix = []
  objects.forEach((object) => {
    numbers.forEach((number) => {
      object.number = number
      matrix.push(object)
    })
  }) 
  return matrix
}()
Run Code Online (Sandbox Code Playgroud)

实际

结果,一旦承诺得到解决,就会返回:

[ 
  { f: 'a', number: 2 },
  { f: 'a', number: 2 },
  { f: 'b', number: 2 },
  { f: 'b', number: 2 } 
] 
Run Code Online (Sandbox Code Playgroud)

预期

但是,我的期望是它会回归:

[ 
  { f: 'a', number: 1 },
  { f: 'a', number: 2 },
  { f: 'b', number: 1 },
  { f: 'b', number: 2 } 
] 
Run Code Online (Sandbox Code Playgroud)

令我最困惑的事情之一是,如果我console.log在推送之前获得对象的价值,它会在我预期的结果中注销掉每个对象.

Nen*_*car 6

因为对象是通过引用传递的,并且您正在修改原始对象,所以您可以推送新对象.

const numbers = [ 1, 2 ]
const objects = [{f: 'a'}, {f: 'b'}]

let matrix = []
objects.forEach((object) => {
  numbers.forEach((number) => {
    matrix.push({...object, number})
  })
})

console.log(matrix)
Run Code Online (Sandbox Code Playgroud)