使用 .push 更新对象以添加新元素
Updating Objects To Add New Element With .push
在下面的代码片段中,目标是通过检查 .name
属性
来检查 addedPlayer
是否已经存在于 players
中
if addedPlayer
已经在 players
: 给玩家一分
else 通过在 addedPlayer
中添加起点
来更新 players
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
只有 returns addedPlayer
。我的目标是 players
将存储每个新玩家并相应地添加积分
您可以通过检查 player.name
来查找给定数组中是否已经存在 newPlayer
来实现这一点,然后如果 newPlayer
已经存在则有条件地递增 player.point
否则添加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
函数时 return 一个新数组,如果您的用例需要您改变数组,您可以使用 Array.prototype.push
并省略 return s 来自函数。我在代码段中包含了一些评论以获取更多详细信息。
始终初始化我们的变量被认为是一种很好的做法。我刚刚为我们的用户对象创建了一个名称变量。
每次您 运行 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)
在下面的代码片段中,目标是通过检查 .name
属性
addedPlayer
是否已经存在于 players
中
if addedPlayer
已经在 players
: 给玩家一分
else 通过在 addedPlayer
中添加起点
players
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
只有 returns addedPlayer
。我的目标是 players
将存储每个新玩家并相应地添加积分
您可以通过检查 player.name
来查找给定数组中是否已经存在 newPlayer
来实现这一点,然后如果 newPlayer
已经存在则有条件地递增 player.point
否则添加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
函数时 return 一个新数组,如果您的用例需要您改变数组,您可以使用 Array.prototype.push
并省略 return s 来自函数。我在代码段中包含了一些评论以获取更多详细信息。
始终初始化我们的变量被认为是一种很好的做法。我刚刚为我们的用户对象创建了一个名称变量。
每次您 运行 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)