首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查该数组包括javascript中的另一个数组。

检查该数组包括javascript中的另一个数组。
EN

Stack Overflow用户
提问于 2019-09-24 21:51:35
回答 2查看 114关注 0票数 0

在javascript中,有函数Array.prototype.includes(),当我们想在数组中找到一些值时,它很有用。当我们搜索字符串、对象或数字值时,它工作得很好。但是,当我们试图在数组中找到一个数组时,它似乎不起作用。

代码语言:javascript
复制
let internalArray = ["a","b"]
let arrayOfArrays = [internalArray]
let result = arrayOfArrays.includes(["a","b"]);

但这是可行的:D

代码语言:javascript
复制
let internalArray = ["a","b"]
let arrayOfArrays = [internalArray]
let result = arrayOfArrays.includes(internalArray);

所以,当我们使用include函数时,javascript是比较数组引用,而不是比较值,对吗?

下一个问题是--如何以另一种方式在数组中找到数组--如何比较内部值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-24 22:06:45

您可以使用.some()并传递一个部分应用的谓词,通过比较长度和调用.every()来检查每个元素是否相等,从而比较数组相等的两个参数:

代码语言:javascript
复制
let equal = a => b =>
  a.length === b.length &&
  a.every((v, i) => v === b[i])

let internalArray = ["a","b"]
let arrayOfArrays = [internalArray]
let result = arrayOfArrays.some(equal(["a","b"]))

console.log(result)

票数 1
EN

Stack Overflow用户

发布于 2019-09-24 22:17:35

假设主数组为a:[ 1,2 ,4,5,6],而要搜索的数组为b: 1,2

然后你就可以:

代码语言:javascript
复制
a.some(function(d){
    return d instanceof Array && this.every((el)=>~d.indexOf(el))
},b)

我将b作为"thisArg“传递,并只检查数组中的元素。如果您有更严格的要求,您可以尝试以下一个:

代码语言:javascript
复制
a.some(function(d){
    if(!(d instanceof Array)){return}
    let copy = this.slice(),_d = d.slice(),_i; 
    this.forEach((el)=>~(_i = _d.indexOf(el)) && _d.splice(_i,1) && copy.splice(copy.indexOf(el),1));
    return !copy.length;
},b)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58088586

复制
相关文章

相似问题

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