我正在尝试理解reduce函数的原始代码以及如何使用它。
var each = function(collection, callback){
if(Array.isArray(collection)){
for(var i=0;i<collection.length;i++){
callback(collection[i]);
}
}
else{
for(var key in collection){
callback(collection[key]);
}
}
};
var reduce = function(collection, callback, accumulator){
each(collection, function(element){
if(accumulator === undefined) {
return accumulator = element;
}else {
return accumulator = callback(accumulator, element);
};
});
return accumulator;
};
var sArr = [3, 2, 3, 4, 5];
each(sArr, function(collection){
console.log(collection);
});
reduce(sArr, function(collection, prev){
console.log(prev = prev + sArr);
});
在我上面的代码中你可以看到我试图通过将它们全部添加到正常的reduce函数中来将所有数组减少为一个元素,但它不像我想象的那样工作。
有人可以检查我是否做错了,如果你能用外行的话向我解释我的减少功能会逐行地做什么?
抱歉新手。
答案 0 :(得分:3)
reduce(sArr, function(collection, prev){
return collection + prev;
});
或等效
reduce(sArr, (collection, prev) => collection + prev);
将返回正确的值。你有什么:
reduce(sArr, function(collection, prev){
console.log(prev = prev + myArr);
});
会尝试将不存在的值(myArr
)添加到当前元素,然后尝试将其分配回本地变量(prev
),该变量将在函数末尾被丢弃,然后显示它,最后将undefined
返回到累加器,因为你没有return
函数。