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
在数组上迭代,在filter
中不需要for
filter
中的for
的问题是,它将返回元素的索引,如果找不到,该索引可能是-1
(truthy),以及数组长度以内的任何内容。仅对于第一个元素,即索引零,filter
不会添加该元素,因为零在JavaScript中是false。
此外,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>');
相关文章:
- $localStorage array select with ng选项工作不正常
- 有时 array.length 只在 .push() 之后工作(为什么?)
- Array.prototype.stice.call()的内部工作
- Array.prototype.slice.call如何在getElementsByClassName的重新创建中工作
- Javascript Array Push 代码如何在内部工作
- JavaScript 方法 array.forEach 在 Chrome 中工作吗?
- 无法使Array.indexOf方法在Javascript中工作
- JavaScript Array.filter未按预期工作
- 我能确定array.slice()的工作方式与array.stice(0)相同吗
- 为什么Array().slice没有“;新的“;工作
- Array.sort工作不正常
- 这个Array.apply方法是如何工作的
- Array.prototype.forEach在IE8中不工作
- 重新实现Array.prototype.slice的JavaScript谜题未按预期工作
- Javascript array.some()函数不能正常工作
- 为什么调用array.prototype. foreach .call()时将数组设置为THIS对象不能工作?
- ' Array.from({length: 5}, (v, i) =>我)的工作
- js Array.prototype.filter.call() - 有人可以解释我这段代码是如何工作的
- jQuery和prototype不能与Array.prototype.reverse一起工作
- 这个Array.prototype.find()是如何工作的?