在下面的代码段中,目标是通过检查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
将存储每个新玩家并相应地添加点数
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
函数的每次调用中返回一个新数组。我在摘要中包含了一些评论,以了解更多详细信息。
每次运行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)