我有一个非常简单的数组,正在检查它是否 .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/