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

道格·威廉

样例代码:

const a = {val: 1};
const b = {val: 2};
const list = [a, b];

console.info(list.includes(a)); // true
console.info(list.includes({val: 1})); // false

问题:

  1. 为什么第二个语句的评估结果为假?
  2. 如何正确使用此方法在对象数组中搜索特定对象?
Firanolfind

TL; TR

list.some(value => JSON.stringify(value) === JSON.stringify({val: 1}));

答案:

  1. 首先,变量a是对象的引用链接。如果使用list.includes(a)它进行检查,则返回true,因为它找到了到先前声明的对象的链接const a = {val: 1};

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

如果要按结构检查同一对象,请Array.prototype.some()为您的情况和逻辑使用并编写比较器功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章