首页 > 解决方案 > 是否有一种直接的方法来检查一个简单的数组是否存在于另一个数组中

问题描述

在以健康实践为重点的应用程序中,我需要检查一个阵列是否存在于另一个阵列中。匹配条件是: * 是否有额外的不匹配元素无关紧要 * 术语是否在“haystack”数组中出现多次无关紧要

我们在 Lodash 讨论中找到了一个很好的解决方案。它在 JSFiddle 中被模拟并且似乎运行良好。

但是在相当复杂的应用程序中,它使用 Lodash 将浏览器炸开

各种配置

这是适用于 Lodash 的代码。

let haystack = ['health tips','iridology','something else','asdfasd'];
let needle = ['iridology','health tips'];

alert(_.intersection(needle,haystack).length === needle.length);

有谁知道用纯 Javascript 执行此操作的简单方法?

标签: javascriptarrays

解决方案


您可以通过Array.prototype.everyneedle数组上使用来做到这一点:

let haystack = ['health tips','iridology','something else','asdfasd'];
let needle = ['iridology','health tips'];


function checkArraySubset(innerArray, outerArray){
  return innerArray.every(str => outerArray.includes(str));
}
//true
console.log(checkArraySubset(needle, haystack));

needle = ['iridology','health tips', 'not present in haystack'];

//false
console.log(checkArraySubset(needle, haystack));

haystack如果数组太长,请从数组中创建一个集合,这将导致 O(1) 查找:

let haystack = ['health tips','iridology','something else','asdfasd'];
let needle = ['iridology','health tips'];

function checkArraySubset(innerArray, outerArray){
   const lookup = new Set(outerArray);
   return innerArray.every(str => lookup.has(str));
}
//true
console.log(checkArraySubset(needle, haystack));


推荐阅读