7

ドキュメントのunderscore-reduceによると、3つのパラメータを渡す必要があります。

例えば:

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo }, 0);
m; // 12 as expected

最初の2つのパラメーターだけを渡そうとすると、異なる値が得られます。なんで?

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo });
m; // 11 ..why?
4

2 に答える 2

6

に渡されるパラメーターは2つだけでreduce、最初と2番目の配列項目を最初の関数呼び出しの引数として使用します。

function addDouble(memo, num) {return (num * 2) +memo }

[1,2,3].reduce(addDouble, 0)
// is equivalent to
addDouble(addDouble(addDouble(0, 1), 2), 3)

[1,2,3].reduce(addDouble)
// is equivalent to
addDouble(addDouble(1, 2), 3)

通常は開始値を渡しますが、 ID要素なしで開始した場合、多くの操作で同じ結果が得られます。例えば:

function add(a, b) { return a+b; }
function double(a) { return 2*a; }

[1,2,3].map(double).reduce(add) == [1,2,3].map(double).reduce(add, 0)

ネイティブreduce()のドキュメントも参照してください。

于 2012-08-01T13:21:42.777 に答える
0

2つのパラメーターを渡すだけの場合、最初のメモは配列の最初の値を取り、残りを通過します。11 = 1 +(2 * 2)+(3 * 3)。これが理由です。また、3つのパラメーターを渡すと、メモは3番目のパラメーターを初期メノとして受け取り、配列の各項目を調べます。

于 2014-01-10T19:41:35.077 に答える