У меня действительно есть проблема, более того с инструкциями для этой домашней задачи, которые заключаются в следующем:
Сокращает сбор до значения, которое является накопленным результатом запуска каждого элемента в коллекции через iteratee, где каждыйПри последующем вызове возвращается значение предыдущего.Если аккумулятор не указан, первый элемент коллекции используется в качестве начального значения.Если начальный параметр не предоставлен, тогда установите начальное значение в качестве нулевого индекса.
Вот разбивка того, что должно произойти:
// reduce([1,2], function(stored,current) {
// return stored + current;
// }); → 3
// reduce([1,2], function(stored,current) {
// return stored + current;
// },1); → 4
, если я читаюинструкции правильно, параметр start является начальным значением для начала накопления, нет?и если при вызове функции не указан параметр запуска, то значение с индексом 0 будет значением начала.Единственная проблема заключается в том, что когда это значение захватывается в тех случаях, когда не задан ни один параметр запуска, первое значение val накапливается дважды, что возвращает результат, который не ожидается.
На данный момент я изучил метод Reduce и различные способы начать с разных индексов.похоже, что если не указано начальное значение, мне нужно установить начальное значение в массив [0], а затем в массив.slice (1) и уменьшить его оттуда, однако я не совсем уверен, что это то, что говорит назначениесделать.
Я не совсем понимаю разницу между accumulator is not provided
и start parameter is not provided
.Если аккумулятор не указан, будет ли начальное значение первым значением во входном массиве, а начальный индекс будет равен 1?чтобы не добавлять / вычитать первое значение дважды?
вот мой код:
function reduce(array, callback, start) {
return array.reduce((acc, val, start) => {
//if start value not provided, start value is index 0
return callback(acc, val) }, start || array[0])
}
вот результаты.
//start provided as -1, result correct
var difference = function(tally, item) {return tally - item; };
var total = reduce([1, 2, 3], difference, -1); // expected -> -7 got -7
//start provded as 2, result correct
var add = function(tally, item) {return tally + item; };
var total = reduce([1, 2, 3], add, 2); // expected -> 8 got 8
//start not provided, first index used as start, as per instructions
//therefore first index is added twice, giving wrong answer
var add = function(tally, item) {return tally + item; };
var total = reduce([1, 2, 3], add); // expected -> 6 got 7
//start not provided, first index used as start, as per instructions
//therefore first index is subtracted twice, giving wrong answer
var difference = function(tally, item) { return tally - item; };
var total = reduce([1, 2, 3], difference); // -> expected -4 got -5