繁体   English   中英

JavaScript Array.filter 没有按预期工作

[英]JavaScript Array.filter not working as expected

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

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迭代数组,你for内部filter

for inside filter的问题是它会返回元素的索引,如果没有找到它可能是-1 ( truthy ) 和数组长度的任何东西。 并且仅对于第一个元素即索引零, filter不会添加该元素,因为零在 JavaScript 中是错误的。

此外, for循环将仅检查bar的第一个元素并从那里return

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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