JavaScript Array.filter未按预期工作

JavaScript Array.filter not working as expected

本文关键字:工作 Array filter JavaScript      更新时间:2023-09-26

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

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]

这将如何工作,以及如何对地图进行同样的工作?

Array#filter在数组上迭代,在filter 中不需要for

filter中的for的问题是,它将返回元素的索引,如果找不到,该索引可能是-1truthy),以及数组长度以内的任何内容。仅对于第一个元素,即索引零,filter不会添加该元素,因为零在JavaScript中是false。

此外,for循环将仅检查来自那里的barreturn的第一个元素。

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>');


您不需要Array#mapmap将在保持相同元素数量的情况下转换数组元素。


ES6:

由于ES6,您可以使用Array#includes和箭头函数使代码看起来更干净:

let arr = [1, 2, 3, 4, 5];
let bar = [2, 4];
arr = arr.filter(v => !bar.includes(v));
console.log(arr);
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');