猿问

是否有一种直接的方法来检查另一个数组中是否存在一个简单数组

在以健康实践为重点的应用程序中,我需要检查一个数组是否存在于另一个数组中。匹配条件是: * 是否有额外的不匹配元素无关紧要 * 术语是否在“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 中执行此操作的简单方法?


ABOUTYOU
浏览 209回答 2
2回答

UYOU

您可以通过Array.prototype.every在needle数组上使用来做到这一点:let haystack = ['health tips','iridology','something else','asdfasd'];let needle = ['iridology','health tips'];function checkArraySubset(innerArray, outerArray){  return innerArray.every(str => outerArray.includes(str));}//trueconsole.log(checkArraySubset(needle, haystack));needle = ['iridology','health tips', 'not present in haystack'];//falseconsole.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));}//trueconsole.log(checkArraySubset(needle, haystack));

九州编程

使用reduce和的一种可能方式includeslet haystack = ['health tips','iridology','something else','asdfasd'];let needle = ['iridology','health tips'];const found = needle.reduce((acc, item) => acc && haystack.includes(item), true);console.log('found ', found);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答