繁体   English   中英

在一个数组中查找长度不等的另一个数组中的元素JavaScript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM