[英]Find element in one array that's in another array unequal lengths JavaScript
我来自Python学习JavaScript。 在Python中,要找出一个列表中的项目是否在另一个列表中,我可以执行以下操作:
haystack = ['a', 'b', 'c', 'd', 'e', 'f']
needle = ['a', 'b', 'e']
[i for i in haystack if i in needle]
在JavaScript中,列表的长度似乎很重要,因为下面的代码返回ab
而不是abe
:
var needle = ["a", "b", "e"]
var haystack = ["a", "b", "c", "d", "e", "f"]
var found = "";
for (i=0; i < haystack.length; i++){
for (j=0; j < needle.length;j++){
if (needle[i] === haystack[j]) {
found+=needle[j]
}
}
}
console.log(found);
Python似乎并不在乎列表的长度是否相等,但是JavaScript会。 如何在JavaScript中执行此操作?
你可以这样做
var needle = ["a", "b", "e"]
var haystack = ["a", "b", "c", "d", "e", "f"]
var list = needle.filter(word => haystack.indexOf(word) >= 0);
在此解决方案中,您不必显式遍历数组的长度。 它返回一个过滤后的单词数组。
其他选择
var list = needle.filter(word => haystack.includes(word));
IE不支持第二个。
您的索引编制错误
if (needle[i] === haystack[j])
将会
if (needle[j] === haystack[i])
而且,不是将那些字符串添加到数组中,而是通过串联它们来形成另一个字符串。
您已经有了一个完全正确的主意-问题是您的if语句是向后的,因此它不会遍历干草堆中的每个元素。
if (haystack[i] === needle[j]) {
长度无关紧要,您可以遍历两个列表。 你只是犯了一个小错误
if (needle[i] === haystack[j]) {
found+=needle[j]
}
由于您使用i
遍历干草堆,使用j
遍历针叶。 当您使用haystack[j]
而不是haystack[i]
您的if子句仅会在haystack上升至"c"
,应该是:
if (needle[j] === haystack[i]) {
found+=needle[j]
}
我会这样做:
function inArray(v, a){ for(i=0,l=a.length; i<l; i++){ if(a[i] === v){ return true; } } return false; } function needlesInHaystack(needlesArray, haystackArray){ for(var i=0,n,a=[],l=needlesArray.length; i<l; i++){ n = needlesArray[i]; if(inArray(n, haystackArray))a.push(n); } return a; } var needles = ['a', 'b', 'e', 'g'], haystack = ['a', 'b', 'c', 'd', 'e', 'f']; console.log(needlesInHaystack(needles, haystack).join(''));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.