使用Array.prototype.includes来定位对象数组中的属性

Ade*_*emo 4 javascript arrays

有了Array.prototype.includes你可以做这样的事情:

let array1 = [1, 2, 3];

console.log(array1.includes(2)); // return true
Run Code Online (Sandbox Code Playgroud)

我的问题是:你可以使用includes一个对象数组,你想要找到的地方,比如"name"="Jane"?以下面的数据为例:

let array2 = [{"name" : "John", age: 24}, {"name" : "Jane", age: 36}]

这是你可以用这个includes方法做的事情- 它会是什么样子?

Laz*_*vić 7

可以使用它,但前提是您有对象的引用(而不是它的结构等价物).

const o1 = { name: '1' }
const o2 = { name: '2' }
const arr = [o1, o2]
arr.includes(o1) // true
arr.includes({ name: '1' }) // false
Run Code Online (Sandbox Code Playgroud)

这是因为根据规范includes使用"SameValueZero"算法(强调我的):

includes使用SameValueZero算法searchElement按升序与数组元素进行比较,如果在任何位置找到,则返回; 否则,退回.truefalse

对于不同的引用," SameValueZero "将始终返回false,因此将返回上述代码的第二次尝试false.

您可以使用Array#some,它允许您指定lambda作为参数.然后,您甚至可以为对象编写自定义相等逻辑.

arr.some(o => o.name == '1') // true
Run Code Online (Sandbox Code Playgroud)

您的评论中,我发现您对检查多个值感兴趣.在这种情况下,您可以简单地使用||运算符some:

arr.some(o => o.name == '1' || o.name == '2' || o.name == '3')
Run Code Online (Sandbox Code Playgroud)

如果您不希望像这样指定所有这些,您可以执行以下操作.

arr.some(o => ['1', '2', '3'].includes(o.name))
Run Code Online (Sandbox Code Playgroud)