Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Array.prototype.includes()查找对象?_Javascript_Arrays_Sorting_Ecmascript 6 - Fatal编程技术网

Javascript 如何使用Array.prototype.includes()查找对象?

Javascript 如何使用Array.prototype.includes()查找对象?,javascript,arrays,sorting,ecmascript-6,Javascript,Arrays,Sorting,Ecmascript 6,示例代码: 问题: 为什么第二个语句的评估结果是错误的? 如何正确使用搜索对象数组中的特定对象? TL;TR 答复: 首先,变量a是指向对象的引用链接。若您使用list.includesa进行检查,它将返回true,因为它找到了指向您先前声明的同一对象的链接const a={val:1} 其次,list.includes{val:1}返回false,因为您试图搜索对新创建的对象{val:1}的引用。对象可能包含相同的值和相同的结构,但它们作为完全不同的对象存储在内存中 如果要按结构检查同一对象,

示例代码:

问题:

为什么第二个语句的评估结果是错误的? 如何正确使用搜索对象数组中的特定对象? TL;TR

答复:

首先,变量a是指向对象的引用链接。若您使用list.includesa进行检查,它将返回true,因为它找到了指向您先前声明的同一对象的链接const a={val:1}

其次,list.includes{val:1}返回false,因为您试图搜索对新创建的对象{val:1}的引用。对象可能包含相同的值和相同的结构,但它们作为完全不同的对象存储在内存中


如果要按结构检查同一对象,请使用Array.prototype.some并为您的案例和逻辑编写比较器函数。

这基本上归结为:

{ val: 1 } === { val: 1 }  // false
javascript中的对象是通过引用进行比较的,由于对象在内存中的位置不同,所以它们并不相同。要检查val设置为1 ypu的对象,必须手动搜索所有对象:

if(list.some(el => el.val === 1))

在基于谓词的数组中搜索单个复杂对象时,Try可能重复。感谢您在这方面的输入!
{ val: 1 } === { val: 1 }  // false
if(list.some(el => el.val === 1))