将新对象推送到数组会导致现有对象发生突变

pushing new objects to array results in mutation of existing object

我正在尝试创建一个 .forEach(),其中对于 users 中的每个 user 对象,user 的某些属性被映射然后推送到 players 数组作为彼此分开的新对象。

但是在我的尝试中,user 的所有结果都堆叠到一个对象中。我怎样才能确保每个 .push() 为每个 user

创建一个新对象

我想要的

[
  {
    name: 'Johnny',
    id: '123456789',
    lives: 3
  },

  {
    name: 'Timmy',
    id: '987654321',
    lives: 3
  },
]

我得到了什么

[
  {
    name: [ 'Johnny', 'Timmy' ],
    id: [ '123456789', '987654321' ],
    lives: 3
  }
]

代码

let players = []
const users = {...}
                
users.forEach(user => {
   let username = user.map(user => user.username)
   let id = user.map(user => user.id)

   players.push({ name: username, id: id, lives: 3 })
})
                
console.log(players)

您可以通过简单的地图调用来完成此操作。我想你想要的更像是:

const users = [
  { username: 'alice', id: 123 },
  { username: 'bob', id: 456 },  
]

const players = users.map(user => ({
  name: user.username,
  id: user.id,
  lives: 3
}))

console.log(players);