【发布时间】:2015-02-22 03:33:56
【问题描述】:
我想创建一个执行以下操作的函数(reduce):
地点:
var collection = [1, 2, 3];
和
function iterator(total, element) {
return total + element;
};
如果initial 定义为3:
reduce(collection, iterator, 3)
会这样做:
3 + 1
4 + 2
6 + 3 = 9
如果initial 是undefined:
reduce(collection, iterator)
会这样做:
1 + 2
3 + 3 = 6
这是我的代码:
var reduce = function(collection, iterator, initial) {
if (initial === undefined) {
var total = 0;
} else {
var total = initial;
}
each(collection, function(element) {
total = iterator(total, element);
});
return total;
}
它可以工作,但是你可以看到我已经硬编码了total = 0,但我希望这段代码在其他情况下也能工作(例如,乘法,我不希望 0 使整个乘积为 0 )。
【问题讨论】:
-
如果数组长度为 4(比如
[1,2,3,1])并且initial设置为 1,会发生什么? -
你为什么不看一下lodash的
reduce代码? -
@aduch 它会是:1+1;总计 = 2 2+2;总计 = 4 4+3;总计 = 7 7+1;总计 = 8
-
@thefourtheye 我意识到有一种方法,但这只是我正在经历的一个学习过程,我被困住了......所以如果有人可以帮助我,那就太好了
-
@HenryNg 只需将
collection中的第一个值分配给total,然后继续处理第二个元素。
标签: javascript function lodash