检查对象数组是否包含另一个对象

Ask*_*ing 1 javascript

我有这个代码:

const arr = [
{name:"Bill", age:11},
{name:"Bill", age:11}
]
console.log(arr.includes({name:"Bill", age:11}))
Run Code Online (Sandbox Code Playgroud)

这里我想检查数组是否包含{name:"Bill", age:11}.
为什么我会假?以及如何使用包含进行此检查?

Tsv*_*nev 8

includes()方法通过引用而不是通过值来比较对象。在您的情况下,这三个对象具有三个不同的引用,尽管它们具有相同的属性和相同的值。

const bill = { name: 'Bill', age: 11 }
const arr = [bill, { name: 'Jane', age: 18 }]

arr.includes(bill) // true (same reference)
arr.includes({ name: 'Bill', age: 11 }) // false (different reference)
Run Code Online (Sandbox Code Playgroud)

如果您想按值查找对象,可以使用该find()方法并传递一个过滤器函数,该函数检查对象的每个属性是否符合您的条件。

const arr = [{name:"Bill", age:11}, {name:"Jane", age:18}]
const exists = Boolean(arr.find(x => x.name === 'Bill' && x.age === 11))

// or even simpler using the `some()` method
const exists = arr.some(x => x.name === 'Bill' && x.age === 11)
Run Code Online (Sandbox Code Playgroud)

  • 组合 `Boolean()` 和 `Array.find()` 的替代方法是简单地使用 [`Array.some()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/参考/Global_Objects/Array/some)。 (2认同)

归档时间:

查看次数:

16192 次

最近记录:

5 年,10 月 前