Подчеркни уменьшить, о памятке

Согласно документации подчеркивание-уменьшение я должен передать три параметра.

Например:

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

Если я пытаюсь передать только первые два параметра, я получаю другое значение. Почему?

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo });
m; // 11 ..why?
7 голосов | спросил Lorraine Bernard 1 PM00000050000005131 2012, 17:19:51

2 ответа


0

Только два параметра передаются в reduce , он будет использовать первый и второй элементы массива в качестве аргументов для первого вызова функции.

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)

Обычно вы передаете начальное значение, но многие операции приводят к тому же результату при запуске без их элемента идентификации . Например:

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()

ответил Bergi 1 PM00000050000004231 2012, 17:21:42
0

Если вы просто передадите два параметра, начальная памятка примет первое значение массива, а остальные пройдут. 11 = 1 + (2 * 2) + (3 * 3). вот почему. И если вы передадите три параметра, памятка примет третий параметр в качестве начального меню и будет проходить через все элементы массива.

ответил jshou 10 Jpm1000000pmFri, 10 Jan 2014 23:41:35 +040014 2014, 23:41:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132