【发布时间】:2019-08-20 05:56:32
【问题描述】:
我试图理解数组“包含”函数。我的目标是确定一个数组是否包含某个项目。它适用于字符串数组,但在使用对象时它不起作用。
var itemsString = ["name1", "name2"];
var itemsObject = [{ name: "name1" }, { name: "name2" }];
var itemToSearch = { name: "name1" };
console.log(itemsString.includes("name1" ));
console.log(itemsObject.includes(itemToSearch));
console.log(itemsObject.includes(x => x.name === "name1"));
输出:
- 是的
- 假
- 假
“包含”是否适用于对象,还是我需要使用其他函数?
【问题讨论】:
-
[{ name: "name1" }, { name: "name2" }];索引 0 处的项目实际上与var itemToSearch = { name: "name1" };不同,因为它们是不同的对象。尽管两个对象具有相同的属性,但它们是不同的实例,因此它们具有不同的引用,因此它们并不相同。但是,如果您对它们进行字符串化,在这种情况下它们将是相同的。 -
只是为了消除混淆
Array#includes使用对象的方式与所有对象比较的工作方式相同 - 只有当它字面上是相同的对象实例时才会找到条目,而不是如果这是一个看起来很相似的对象。 -
itemsObject.some(x => x.name === "name1") -
@giorgim 谢谢,重新考虑
-
你最后一次尝试的方向是正确的,只是使用的方法不是
.include()而是.some()。
标签: javascript