我觉得这样是正确的,但它并不起作用:
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]
这将如何工作,并如何使用地图完成相同的工作?
我觉得这样是正确的,但它并不起作用:
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
的问题在于它会返回元素的索引,如果未找到则可以是-1
(truthy),并且任何长度的数组都可以。只有对于第一个元素即索引为零,filter
才不会添加该元素,因为JavaScript中的零是falsey。
此外,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#map
,map
会将数组元素转换,并保持相同数量的元素。
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>');
arr.filter(e => !bar.includes(e))
- Tushar
i
? - Rayon