JavaScript为什么array.filter跳过第一个值?

时间:2016-01-25 16:31:32

标签: javascript arrays

我发现array.filter奇怪的怪癖,我还没有找到任何参考。我试图使用条件集来获取数组中的前三个值,以返回索引小于3的所有值。但结果数组不包含第一个值。我拿出条件将它与.map.forEach进行比较,这两个方法检索第一个值。我错过了关于.filter的内容吗?

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];

var filterArr = arr.filter(function(v,i){ return v; });

console.log(filterArr); // [1, 2, 3, 4, 5, 6, 7, 8]

var mapArr = arr.map(function(v,i){ return v; });

console.log(mapArr); // [0, 1, 2, 3, 4, 5, 6, 7, 8]
 
var eachArr = [];

arr.forEach(function(v,i){
	eachArr.push(v);
});

console.log(eachArr); [0, 1, 2, 3, 4, 5, 6, 7, 8]

2 个答案:

答案 0 :(得分:3)

filter function为每个元素调用一个回调,其中回调是:

  

测试数组中每个元素的函数。使用参数(元素,索引,数组)调用。返回true表示保留元素,否则返回 false

你正在返回v,传递给它的元素。 0是“falsy”,因此生成的过滤数组不包含它。

答案 1 :(得分:1)

您正在过滤掉第一个值:

var filterArr = arr.filter(function(v,i){ return v; });

filter遍历每个元素,如果返回false,则删除该项。 0等同于布尔上下文中的false。这就是第一个元素消失的原因。