var a1 = { name: 'a' }
var a2 = { name: 'a' }
console.log(a1 === a2) // false because they are not the same object in memory even if they have the same data
但是如果你搜索一个实际上在数组中的对象,它就起作用了:
var a1 = { name: 'a' }
var a2 = { name: 'a' }
var array = [a1, a2]
console.log(array.includes(a1)) // true because the object pointed to by a1 is included in this array
var a = {name: 'trent'};
var b = {name: 'jason'};
[a,b].includes(a); //true
使用some代替匹配整个对象:
var objToFind = JSON.stringify( {name: 'trent'} );
let check = [{name: 'trent'},{name: 'jason'}].map( s => JSON.stringify( s ) ).some( s => s == objToFind );
7条答案
按热度按时间wribegjk1#
includes
本质上检查是否有元素===
是您要搜索的元素。对于对象,===
表示字面上相同的对象,如在相同的引用(内存中的相同位置)中,而不是相同的形状。但是如果你搜索一个实际上在数组中的对象,它就起作用了:
shyt4zoc2#
管道
简单快速
cwtwac6a3#
它不起作用是因为对象从来都不相同,每个对象都有自己的引用:
请改用
array.prototype.some
:8ulbf1ek4#
includes
检查值是否存在于数组中,并且您的情况是该值是引用值并且对于每个文本声明都不同(即使文本相同)使用
some
代替匹配整个对象:rwqw0loc5#
includes()
方法确定数组是否包含某个元素,并根据需要返回true
或false
。但是,在比较两个对象时,它们并不相等。它们在内存中应该具有相同的引用才能相等。您可以使用如下所示的内容
ds97pgxw6#
检查数组是否包含
x,y
对:下面是我用过几次的Faly's answer的实现。
例如,如果有一个XY坐标对数组,如:
...并且您需要检查数组
px
是否包含特定的XY对,请使用此函数:......因此,使用上面的
px
数据集:daupos2t7#
可以使用Array.find()方法检查数组是否包含对象,如“Array.includes检查数组中的'==='”,这对对象无效
示例解决方案: