JavaScript Array.filter无法按预期工作

时间:2015-12-22 05:27:15

标签: javascript arrays dictionary filter

对我来说似乎是对的,但它不起作用:

var arr = [1, 2, 3, 4, 5];

var bar = [2, 4];

arr = arr.filter(function(v) {
  for (var i; i < bar.length; i++) {
    return bar.indexOf(v);
  }
});

console.log(arr); // []

// expected: [1, 3, 5]

这将如何工作,以及如何使用map进行相同的工作?

1 个答案:

答案 0 :(得分:9)

Array#filter遍历数组,您不需要for内的filter

forfilter的问题是它会返回元素的索引,如果-1 truthy ),则返回找不到任何数组长度的东西。并且仅对于第一个元素,即索引零,filter将不会添加元素,因为在JavaScript中零是假的。

此外,for循环只会检查barreturn的第一个元素是否来自那里。

&#13;
&#13;
var arr = [1, 2, 3, 4, 5];
var bar = [2, 4];

arr = arr.filter(function(v) {
  return bar.indexOf(v) === -1;
});

console.log(arr);
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

您不需要Array#mapmap会将数组元素转换为保持相同数量的元素。