使用Javascript检查数组中存在的元素
我想检查一个数组中的元素是否存在于另一个数组中。如果存在元素,则将这些元素推送到新数组中。在本例中,我有一个字符串数组 例如使用Javascript检查数组中存在的元素,javascript,arrays,loops,sorting,nested-loops,Javascript,Arrays,Loops,Sorting,Nested Loops,我想检查一个数组中的元素是否存在于另一个数组中。如果存在元素,则将这些元素推送到新数组中。在本例中,我有一个字符串数组 例如 var check = ["6003", "6005", "6010"]; //static values. I need to check these elements if they are present in InputValues var InputValues = ["5005", 2005", "6010"]; //dynamic input values
var check = ["6003", "6005", "6010"]; //static values. I need to check these elements if they are present in InputValues
var InputValues = ["5005", 2005", "6010"]; //dynamic input values
var result = ["6010"]; //dyanimic final array based off elements in InputValues
同样地
var InputValues = ["5005", 6005", "6010"];
var result = ["6005", "6010"];
有人能告诉我如何实现这一动态结果吗
var result = InputValues.filter((val) => check.includes(val));
编辑:使用了错误的方法.includes()
如果您不关心IE(尽管它在Edge中),那么它就可以工作,否则这就是要使用的“现代”工具:-)您可以与一起使用
基本上它所做的是,它将过滤
InputValues
中的元素,而不是check
区分大小写。可能是某个地方的重复项。。。但是你可以做var set=newset(检查);var result=InputValues.filter(value=>set.has(value))
似乎与我上面的建议非常相似,但在应用过滤器之前,也会从两个输入数组中删除重复项。Yep-doh!尽管为浏览器兼容性提供了链接到MDN的借口;-)在下面的段落中,您仍然称它为.contains()
。不,我不会称之为“现代”的。它比.indexOf(…)>=0更具语义,但我认为在我对这个问题的评论中使用集和.has()
检查将是一个数量级,因为.has()
是平均的O(1)时间复杂度,而.includes()
是O(n)时间的复杂性。啊,除了疲劳,我没有任何借口!将其更改为集
,并根据数组的长度使用它可能会更快,但除非缓存集
,否则对GC和整体性能的影响将显著降低-鉴于问题的简单性,它添加了很多OP可能无法理解的内容!;-)
var result = InputValues.filter(elem => check.indexOf(elem) >= 0);