javascript - 数组 .includes() 给出意外行为

我有一个非常简单的数组,正在检查它是否 .includes() 一个值。但它没有返回我期望的结果。

var myArray = [['noca', 'North Cascades National Park'], ['shen', 'Shenandoah National Park']];

var myItem = ['noca', 'North Cascades National Park'];

myArray.includes(myItem);   //returns false

为什么 myArray.inclues(myItem) 返回 false?这似乎是世界上最简单的事情。它应该返回 true。

最佳答案

检查一个数组是否包含另一个数组是很棘手的。正如我在评论中所说,['noca'] === ['noca'] 返回 false 因为这是两个不同的数组。

另一方面,JSON.stringify(['noca']) === JSON.stringify(['noca']) 返回 true 因为它比较两个字符串,所以你可以使用它:

var myArray = [['noca', 'North Cascades National Park'], ['shen', 'Shenandoah National Park']];
var myItem = ['noca', 'North Cascades National Park'];

const checkContains = (parent, child) => parent.some(arr => JSON.stringify(arr)===JSON.stringify(child))

console.log( checkContains(myArray, myItem) )
console.log( checkContains(myArray, ["test"]) )
console.log( checkContains(myArray, ["noca"]) ) // No false positive (works as intended)

https://stackoverflow.com/questions/66987374/

相关文章:

java - 将 java.util.function.Function 定义为 static fi

python - Django 在速记渲染方法中添加自定义 header

javascript - 使用 JavaScript 中的动态属性对数组中的所有对象项求和

python - 替代全局变量

java - 使用 java Supplier 接口(interface)创建条件对象

r - 如何根据在ggplot中分配的概率对单词重新排序

r - 错误延迟加载包 'devtools' 失败

java - 使用 Java Streams 返回单词出现的句子计数和列表

reactjs - Eslint错误: Do not nest ternary expression

angular - 类型 'null' 的参数不可分配给参数 Angular