javascript - 是否有一种直接的方法来检查一个简单的数组是否存在于另一个数组中
问题描述
在以健康实践为重点的应用程序中,我需要检查一个阵列是否存在于另一个阵列中。匹配条件是: * 是否有额外的不匹配元素无关紧要 * 术语是否在“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 执行此操作的简单方法?
解决方案
您可以通过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));
}
//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));
推荐阅读
- mysql - 如何在 sequelize 中的查询中填充外键(就像在 mongoose 中完成的那样)(nodejs)
- .net - 将 .mdb 保存在共享驱动器中的 commonFile 上以进行多用户连接
- javascript - voiceChannel.join() 不是函数节点 v16 discord.js
- java - iText 7 - 在标题单元格中旋转文本
- c - 如何取消引用 inet_ntop 的双指针
- visual-studio - 通过 Shell 运行时,Visual Studio 编译器不退出(返回值 STILL_ACTIVE)
- ios - WKWebView - 设备旋转时内容不旋转
- excel - 如果右侧的单元格中有文本,则将公式插入单元格
- go - GORM:为关联的嵌套预加载添加限制不起作用?
- caching - 从 Web Socket 应用程序外部更新 Web Socket