【问题标题】:Find object with specific value in array [duplicate]在数组中查找具有特定值的对象[重复]
【发布时间】:2019-02-26 20:27:00
【问题描述】:

我有一个 数组对象,如下所示:

"users": [
   {
     "type": "User",
     "userId": "5b774905c2b2ac0f33ac4cc7",
     "name": "Mike"
   },
   {
     "type": "User",
     "userId": "5b77490f3084460f2986bd25",
     "name": "Pater"
   }
]

现在,我想检查我的数组是否包含名为“Mike”的对象。

如何在 javascript 中处理这个问题?

我在想这样的事情,但不确定如何:

if ( "Mike" in users ) {
   // Do something...
}

希望对此有所帮助,并在此先感谢 ;-)

【问题讨论】:

  • 这本身不是重复的,因为我遇到了类似的问题,键是数字而不是字符串。

标签: javascript arrays object


【解决方案1】:

有很多方法可以实现,例如,这里有四种 ES6 方法:

  1. some() 将返回 truefalse,具体取决于条件。它测试,在列表中是否有一个元素符合条件
  2. find() 将返回一个项目本身(第一个匹配的项目),如果条件计算结果为 trueundefined 如果计算结果为 false
  3. findIndex() 将返回项目的索引(第一个匹配的索引),如果条件计算为 true-1 如果计算为 false
  4. filter() 将创建一个包含所有符合条件的项的新数组(否则返回一个空数组)

const users = [
   {
     "type": "User",
     "userId": "5b774905c2b2ac0f33ac4cc7",
     "name": "Mike"
   },
   {
     "type": "User",
     "userId": "5b77490f3084460f2986bd25",
     "name": "Pater"
   }
];

const someObject = users.some(item => item.name === 'Mike');
const targetObject = users.find(item => item.name === 'Mike');
const targetIndex = users.findIndex(item => item.name === 'Mike');
const filteredObjects = users.filter(item => item.name === 'Mike');

console.log('someObject:', someObject)
console.log('targetObject:', targetObject)
console.log('targetIndex:', targetIndex)
console.log('filteredObjects:', filteredObjects)

【讨论】:

  • 这应该是最好的答案。
【解决方案2】:

users.find(user => user.name ==='Mike')

users.filter(user => user.name ==='Mike').length !== 0

users.map(user => user.name).includes('Mike')

【讨论】:

    【解决方案3】:

    if(users.find(({ name }) => name === "Mike")) {
        // do your thing
    }

    【讨论】:

      【解决方案4】:

      Some 是任务的作业。根据回调值是否存在返回truefalse

      let users = [
         {
           "type": "User",
           "userId": "5b774905c2b2ac0f33ac4cc7",
           "name": "Mike"
         },
         {
           "type": "User",
           "userId": "5b77490f3084460f2986bd25",
           "name": "Pater"
         }
      ]
      
      
      console.log(users.some(i => i.name == 'Mike'))
      console.log(users.some(i => i.name == 'Joe'))

      【讨论】:

        【解决方案5】:

        您需要检查内部对象的属性name的值。

        这个提议检查每个对象,因为它没有被授予,name 是唯一的。

        var users = [{ type: "User", userId: "5b774905c2b2ac0f33ac4cc7", name: "Mike" }, { type: "User", userId: "5b77490f3084460f2986bd25", name: "Pater" }];
        
        users.forEach(o => {
            if (o.name === 'Mike') {
                console.log(o);
            }
        });

        【讨论】:

          猜你喜欢
          • 2018-12-05
          • 2021-10-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-17
          • 2016-04-13
          • 2018-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多