javascript - 检查数组是否“包含”Javascript中的项目
问题描述
我试图理解数组“包含”函数。我的目标是确定一个数组是否包含某个项目。它适用于字符串数组,但在使用对象时它不起作用。
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"));
输出:
- 真的
- 错误的
- 错误的
“包含”是否适用于对象,还是我需要使用其他功能?
解决方案
你需要Array.prototype.some()
在这种情况下使用。Array.prototype.includes()
不接受函数参数*,并且您没有测试严格相等。
const itemsObject = [{ name: "name1" }, { name: "name2" }];
console.log(itemsObject.some(x => x.name === "name1"));
*来自评论部分的同行压力迫使我澄清它includes()
确实接受函数参数,但不会使用传递的函数作为谓词来确定给定项目是否匹配。相反,它将尝试在数组中找到与传递的函数严格相等的项。
推荐阅读
- excel - VBA 从一个驱动器中删除文件
- bash - 在 macos 上找不到 Bash 命令
- flutter - 如何让 GestureDetector 在 Flutter Web 中检测两指拖动?
- python - 用于连接到 s3 客户端的 aws 配置文件
- php - 为什么我在教程代码中收到解析错误
- sql - 将 oracle sql 密集秩函数转换为 Bigquery
- python - 从数据框中自动制作多个条形图
- c++ - 为什么即使 std::getline 不返回布尔值,while(std::getline) 循环也能工作?
- pandas - 使用 GroupBy 后,列如何在 Pandas 数据框中工作
- blockchain - 如何在卡尔达诺中创建不可转让资产