首页 > 解决方案 > 将给定字符串与数组子属性进行比较

问题描述

我正在构建一个数组,当在里面的属性中找不到players时将添加该数组solvernameplayers

let players = []

let solver = 'Any Name Given'

// This if statement is the issue : How to check the name properties and compare to solver 
// If the solver's name is already in players : add +1 point
if(players.includes(solver)){

   // Give The Player +1 point

   return console.log('Player Exists')

 } else {

   // Add The newPlayer to players with a starting point 
   let newPlayer = [name = solver, points = 1]
   players.push(newPlayer)

}

我如何solver比较name. players我试过了players[name]players.name但没有运气

标签: javascriptarraysinclude

解决方案


在您的else中,您应该拥有:

const newPlayer = {name: solver, points: 1};

即一个对象,而不是一个数组。这样您就拥有players始终包含player对象的数组

现在,由于您拥有的是一个对象数组,因此您需要使用类似some的东西来查找是否存在与您的条件匹配的对象:

if条件可以替换为:

if (players.some(player => player.name === solver))

我刚刚看到你想将找到的玩家的积分增加1. 在这种情况下,您应该使用find而不是some这样您就可以访问找到的播放器并更新其points属性。所以这样做:

const player = players.find(player => player.name === solver);

if (player) {
    player.points++;
} else {
    const newPlayer = {name: solver, points: 1};
    players.push(newPlayer)
}


推荐阅读