renovations

This commit is contained in:
Ilya Kantor 2015-01-11 01:54:57 +03:00
parent 4b8b168fd2
commit c7d4c7e3ff
172 changed files with 869 additions and 244 deletions

View file

@ -1,47 +0,0 @@
Метод `arr.reduce` подходит здесь идеально. Достаточно пройтись по массиву слева-направа, накапливая текущую сумму в переменной и, кроме того, добавляя её в результирующий массив.
Неправильный вариант может выглядеть так:
```js
//+ run
function getSums(arr) {
var result = [];
if (!arr.length) return result;
arr.reduce(function(sum, item) {
result.push(sum);
return sum + item;
});
return result;
}
alert(getSums([1,2,3,4,5])); // результат: *!*1,3,6,10*/!*
```
Перед тем, как читать дальше, посмотрите на него внимательно. Заметили, в чём ошибка?
Если вы его запустите, то обнаружите, что результат не совсем тот. В получившемся массиве всего четыре элемента, отсутствует последняя сумма.
Это из-за того, что последняя сумма является результатом метода `reduce`, он на ней заканчивает проход и далее функцию не вызывает, поэтому она оказывается не добавленной в `result`.
Исправим это:
```js
//+ run
function getSums(arr) {
var result = [];
*!*var totalSum*/!* = arr.reduce(function(sum, item) {
result.push(sum);
return sum + item;
});
*!*result.push(totalSum);*/!*
return result;
}
alert(getSums([1,2,3,4,5])); // *!*1,3,6,10,15*/!*
alert(getSums([-2,-1,0,1])); // *!*-2,-3,-3,-2*/!*
```