使用.push更新对象以添加新元素

问题描述 投票:0回答:2

在下面的代码段中,目标是通过检查addedPlayer属性来检查players中是否已经存在.name

如果 addedPlayer已经在players中:给玩家一个分数

else通过在起点添加players来更新addedPlayer

let players = []

let addedPlayer = { 

   name: /* The Given Name To Check in players */ ,
   points: 1

}

function addPlayer(playerList, playerToAdd){

   const existingPlayers = playerList.map((playerToAdd) => playerToAdd.name);

   if(existingPlayers.includes(playerToAdd.name)){

       playerToAdd.points++

   } else {

      playerList.push(playerToAdd)

   }
}

addPlayer(players, addedPlayer)

console.log(players)

问题是players仅返回addedPlayer。我的目标是players将存储每个新玩家并相应地添加点数

javascript object push
2个回答
1
投票
您可以通过检查newPlayer来查找player.name是否已存在于给定数组中,然后如果player.point已经存在则有条件地递增newPlayer,否则将newPlayer添加到数组中来实现。

这里是一个例子。

let players = [ { name: 'Player1', point: 1 }, { name: 'Player2', point: 2 } ] let newPlayer = { name: 'Player2', points: 1 } function addPlayer(playerlist, newPlayer) { // idx will be -1 if a player does not exist in playerlist by the name const idx = playerlist.findIndex(p => p.name === newPlayer.name); if (idx === -1) { // if you want to mutate the original array you can use playerlist.push(newPlayer) then return immediately from the function and omit the next return line return [...playerlist, newPlayer] } // increment player.point if newPlayer already exists playerlist[idx] = {...playerlist[idx], point: playerlist[idx].point + 1} // if you want to mutate the original array then omit the next return line return [...playerlist] } // because newPlayer already exists in players array by name calling the function addPlayer will increment player.point in players array where player.name is 'Player2' console.log(addPlayer(players, newPlayer)) // calling the function with a player that does not exist in the array let anotherPlayer = { name: 'Player3', point: 0 }; // anotherPlayer will be added to the returned array console.log(addPlayer(players, anotherPlayer))
P.S。 -如果您的用例要求您更改可以使用addPlayer的数组并忽略该函数的返回值,则当前解决方案将在Array.prototype.push函数的每次调用中返回一个新数组。我在摘要中包含了一些评论,以了解更多详细信息。

0
投票
始终初始化变量被认为是一种好习惯。我刚刚为我们的用户对象创建了一个名称变量。

每次运行addPlayer都会将新玩家推送到列表中。

let players = [] var name = ""; let addedPlayer = { name: name, points: 1 } function addPlayer(playerList, playerToAdd) { const existingPlayers = playerList.map((playerToAdd) => playerToAdd.name); if (existingPlayers.includes(playerToAdd.name)) { playerToAdd.points++ } else { playerList.push(playerToAdd) } } addPlayer(players, addedPlayer) console.log(players)

© www.soinside.com 2019 - 2024. All rights reserved.