使用Array.prototype.includes
,您可以执行以下操作:
let array1 = [1, 2, 3];
console.log(array1.includes(2)); // return true
我的问题是:是否可以将includes
用于要在其中查找“ name” =“ Jane”的对象数组?以以下数据为例:
let array2 = [{"name" : "John", age: 24}, {"name" : "Jane", age: 36}]
您可以使用includes
方法执行此操作吗?它看起来像什么?
答案 0 :(得分:7)
您可以 使用它,但前提是您具有对对象的引用(不是其结构等效项)。
const o1 = { name: '1' }
const o2 = { name: '2' }
const arr = [o1, o2]
arr.includes(o1) // true
arr.includes({ name: '1' }) // false
这是因为includes
使用“ SameValueZero”算法as per the spec(强调我):
includes
将searchElement
与数组的元素按升序进行比较,使用SameValueZero算法,如果发现在任何位置,则返回true
;否则,将返回false
。
“ SameValueZero”对于不同的引用将始终返回false,因此,上述代码的第二次尝试将返回false
。
您可以改用Array#some
,它可以让您指定一个lambda作为参数。然后,您甚至可以为对象编写自定义相等逻辑。
arr.some(o => o.name == '1') // true
在your comment中,我看到您有兴趣检查多个值。在这种情况下,您可以将||
运算符与some
一起使用:
arr.some(o => o.name == '1' || o.name == '2' || o.name == '3')
如果您不想指定所有这些对象,则可以执行以下操作。
arr.some(o => ['1', '2', '3'].includes(o.name))
答案 1 :(得分:3)
在这种情况下,您可以改用some
方法,它将在第一个比赛中返回true
。
let array = [{"name" : "John", age: 24}, {"name" : "Jane", age: 36}]
let check = array.some(({name}) => name == 'Jane');
console.log(check)
答案 2 :(得分:2)
array.find(user => user.name === "Jane")
当对象通过引用进行比较时,.includes
在大多数情况下无济于事,因此您必须手动检查所有元素并检查是否相等,这就是.find
所做的。它要么返回找到的用户,要么返回undefined
。如果您只需要布尔运算符.some
,其用法类似于.find
,但返回true或false。
答案 3 :(得分:0)
您可以这样做。
let array2 = [{
"name": "John",
age: 24
}, {
"name": "Jane",
age: 36
}]
var some = array2.some((i) => {
return i.name === 'Jane'
})
var map = array2.map((i) => {
return i.name === 'Jane'
})
console.log('some', some)
console.log('map', map)