首页 > 解决方案 > 检查数组是否包含另一个数组JS

问题描述

如果我有 2 个这样的数组:

arr1 = [[1,2]]
arr2 = [1,2]

如何检查 arr2 是否在 arr1 中?我尝试了以下方法:

arr1.includes(arr2)

但这返回错误。有没有一种简单的方法可以在 JS 中做到这一点?

编辑:我还想在 arr1 中获取 arr2 的真实索引。例如:

arr1.indexOf(arr2) => 0

因为 arr2 是 arr1 的第一个索引。

标签: javascriptarrays

解决方案


您可以编写一个简单的函数来搜索数组列表中的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;
}


推荐阅读