首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供意外行为的数组.includes()

提供意外行为的数组.includes()
EN

Stack Overflow用户
提问于 2021-04-07 21:42:25
回答 4查看 61关注 0票数 2

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

代码语言:javascript
复制
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。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-07 22:10:28

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

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

代码语言:javascript
复制
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)

票数 3
EN

Stack Overflow用户

发布于 2021-04-07 21:50:03

以下是从该答案中采用的内容:

https://stackoverflow.com/a/48538239/2096053

代码语言:javascript
复制
var datas= [
  ["aaa", "bbb"],
  ["ddd", "eee"]
];

function exists(arr, search) {
    return arr.some(row => 
        Array.isArray(row) &&
        Array.isArray(search) &&
        row.length === search.length &&
        row.every((val, index) => val === search[index])
)
};

console.log(exists(datas, ['aaa', 'bbb'])); // TRUE
console.log(exists(datas, ['aaa']));        // FALSE
console.log(exists(datas, ['xxx']));        // FALSE
console.log(exists(datas, 'xxx'));          // FALSE

您需要结合使用someincludes来正确遍历阵列。

我已经更新了这个答案来搜索数组。

票数 3
EN

Stack Overflow用户

发布于 2021-04-07 21:47:01

这是一种预期的行为,因为数组是一个对象,并且它被引用。因此,要比较的数组元素和实际元素将不相等,Array.prototype.includes()将返回false

如果你尝试跟随,它将返回true

代码语言:javascript
复制
var myItem = ['noca', 'North Cascades National Park'];

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

myArray.includes(myItem);   //returns true
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66987374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档