我发现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]
答案 0 :(得分:3)
filter
function为每个元素调用一个回调,其中回调是:
测试数组中每个元素的函数。使用参数(元素,索引,数组)调用。返回true表示保留元素,否则返回 false 。
你正在返回v
,传递给它的元素。 0
是“falsy”,因此生成的过滤数组不包含它。
答案 1 :(得分:1)
您正在过滤掉第一个值:
var filterArr = arr.filter(function(v,i){ return v; });
filter
遍历每个元素,如果返回false
,则删除该项。 0
等同于布尔上下文中的false
。这就是第一个元素消失的原因。