javascript - 检查数组是否包含另一个数组JS
问题描述
如果我有 2 个这样的数组:
arr1 = [[1,2]]
arr2 = [1,2]
如何检查 arr2 是否在 arr1 中?我尝试了以下方法:
arr1.includes(arr2)
但这返回错误。有没有一种简单的方法可以在 JS 中做到这一点?
编辑:我还想在 arr1 中获取 arr2 的真实索引。例如:
arr1.indexOf(arr2) => 0
因为 arr2 是 arr1 的第一个索引。
解决方案
您可以编写一个简单的函数来搜索数组列表中的arr2
,请记住sort
在比较之前您需要这样做。以下是一些示例,以获取index
是否arr2
也找到它:
let arr1 = [[1,2]];
let arr2 = [1,2];
console.log(arrayInList(arr1,arr2));
arr2 = [1,3]
console.log(arrayInList(arr1,arr2));
function arrayInList(arr1, arr2){
if(!arr1 || arr1.length==0 || !arr2 || arr2.length==0)
return false;
arr2 = arr2.sort();
let foundIndex = -1;
for(let i = 0; i < arr1.length; i++){
let current = arr1[i].sort();
if(current.length != arr2.length)
continue;
let areEqual = true;
for(let j = 0; j < arr2.length; j++){
if(arr2[j] != current[j]){
areEqual = false;
break;
}
}
if(!areEqual){
continue;
}else{
foundIndex = i;
break;
}
}
return foundIndex;
}
一个更快的解决方案是将它们存储在一个对象中,如下所示:
let arr1 = [[1,2]];
let arr2 = [1,2];
console.log(arrayInList(arr1,arr2));
arr2 = [1,3]
console.log(arrayInList(arr1,arr2));
function arrayInList(arr1, arr2){
if(!arr1 || arr1.length==0 || !arr2 || arr2.length==0)
return false;
arr2 = arr2.sort();
let set = {};
for(let i = 0; i < arr1.length; i++)
set[arr1[i].sort()] = i;
return (set[arr2]!=undefined)?set[arr2]:-1;
}
推荐阅读
- javascript - 在页面上单击随机 div 显示并使用 jquery 隐藏
- reactjs - 为什么我的环境变量在反应中不起作用
- angular - 尽管存在规范文件,业力在 Angular 项目中显示“不完整:未找到规范”
- reactjs - 如何编辑通过纱线安装的节点模块?
- node.js - 用户 id 进入数据库 null React
- windows - win32:互斥锁释放的速度不够快?
- python - 在拱门上找到 x 和 y
- r - 在ggplot中添加两个图例
- flutter - 用户交换时如何取标签的索引值?
- linux - Kubernetes Job 提供 json 文件输入