【发布时间】:2016-05-07 11:12:25
【问题描述】:
我的主要学术目标是solve this problem,而且大部分时间我都做到了。此外,我想通过不了解我的代码有什么问题来确保我没有错过 reduce 的基本部分。
这就是我要解决的方法,我已经附加了我的 reduce 函数和 filter 函数。我相信我的 reduce 函数可以工作,但是我的 filter 函数并不能很好地工作,因为我无法通过我的测试用例。
1) 为什么我没有命中数组的最后一个元素?
我注意到 prev 和 curr 实际上在 reduce 函数的任何时候都不会返回 5。我的 reduce 函数中是否缺少某些内容?
myArray = [1,2,3,4,5];
function each(collection, action){
if(Array.isArray(collection)){
for(var i = 0; i < collection.length; i ++){
action(collection[i]);
}
}
else if(typeof(collection) === "object"){
for (var property in collection){
action(collection[property]);
}
}
}
function reduce(collection, combine, start){
each(collection, function(element){
if(start === undefined){
return start = element;
}
else {
return start = combine(start, element);
}
});
return start;
}
function filterR(collection, predicate){
var aR = [];
reduce(collection, function(prev, curr){
if(predicate(prev)){
aR.push(prev);
}
if(predicate(curr)){
aR.push(curr);
}
});
return aR;
}
console.log(filter(myArray, function(val){return val % 5 === 0;})); //expected [5]
console.log(filter(myArray, function(val){return val <= 5;})); //expected [1,2,3,4,5]
【问题讨论】:
-
你要分享你的
each函数 -
@naomik 感谢您指出这一点!
标签: javascript arrays functional-programming