对此有很多麻烦,我迫切希望朝着正确的方向前进。
尝试通过编写reduce函数来完成常见的Underbar(基本上是Underscore)练习。它必须满足四个测试:
这告诉我,有两种基本情况:
给出了累加器,使得累加器!=未定义,此时你可以使用.each来满足测试1和3,因为你要经历所有值,从(累加器,集合[0])开始,然后(集合[0],集合[1]),等等。或者那是我的想法;我可以离开。
if (accumulator != undefined) {
_.each(collection, function(value) {
accumulator = iterator(accumulator, value);
});
}
return accumulator;
测试2和4仍然失败,因为没有给出累加器,在那时,我迷路了。我不认为。每个都可以使用。基本上我必须告诉这个从集合[0]开始并迭代其余部分,但我完全迷失了。我对编码仍然很陌生,其中很多还没有完全融入其中。
我们非常感谢您提供的任何帮助。如果我对这些功能的工作原理有误,请随时纠正。我只是在寻求帮助。
答案 0 :(得分:0)
以下代码应该完成这项工作。
Array.prototype.reduce = function(callback, accumulator){
var needsAccum = arguments.length <2;
if (this.length === 0){
return this;
}
this.forEach(function(item){
if (needsAccum){
accumulator = item;
needsAccum = false;
}
else{
accumulator = callback(accumulator, item)
}
})
return accumulator;
}
答案 1 :(得分:0)
总结部分问题:
“我如何使用_.each进行迭代,有时我必须跳过第一次迭代” - “不会_.each在每个索引处迭代?”
对我来说,我发现解决办法是在我的_.each
中添加一个if / else语句_.each(collection, function(value, index) {
if (accumulator === undefined){
accumulator = item;
} else {
accumulator = iterator(accumulator, value);
}
}
基本上,将if语句放在_.each中而不是之前。 在第一次迭代中,如果没有累加器,循环将进入“IF”,并将跳过“ELSE”