2015-03-30 3 views
1

Имея много проблем с этим, до такой степени, что я отчаянно нуждаюсь в толчке в правильном направлении.. Сбросьте без аккумулятора

Работая над попыткой выполнить обычное упражнение Underbar (в основном Underscore), написав функцию уменьшения. Он должен удовлетворять четыре испытания:

  1. должен иметь возможность суммировать массив
  2. Если использовать первый элемент в качестве аккумулятора, когда никто не дается
  3. должны включать итератор на первый элемент, когда дан аккумулятор
  4. не должен вызывать итератор на первый элемент при его использовании в качестве аккумулятора

Это наводит на мысль, что для меня есть две основные ситуации:

  1. Аккумулятор задан, что делает аккумулятор! = Неопределенным, с которого вы можете использовать .each, чтобы удовлетворить тесты 1 и 3, так как вы прошли все значения, начиная с (аккумулятор, коллекция [0]), , то (сбор [0], сбор [1]) и т. д. Или это мое мышление; Я мог бы уйти.

    if (accumulator != undefined) { 
        _.each(collection, function(value) { 
        accumulator = iterator(accumulator, value); 
        }); 
    } 
    return accumulator; 
    
  2. Испытания 2 и 4 до сих пор не потому, что нет аккумулятора не дано, и в этот момент я потерял. Я не думаю, что его можно использовать. В принципе, я должен сказать это, чтобы начать с коллекции [0] и повторить все остальное, но я полностью потерян. Я все еще очень новичок в кодировании, и многое из этого еще не полностью поглотило.

Любая помощь, которая может быть предоставлена, глубоко оценена. Если мои мысли ошибочны в отношении того, как эти функции работают, пожалуйста, не стесняйтесь исправить это. Я просто ищу помощь.

+2

Как насчет нормального цикла 'for'? –

+1

Посмотрите, как использовать _.first и _.rest, когда аккумулятор не поставляется –

ответ

0

Следующий код должен соответствовать заданию.

Array.prototype.reduce = function(callback, accumulator){ 
 
\t var needsAccum = arguments.length <2; 
 
\t if (this.length === 0){ 
 
\t \t return this; 
 
\t } 
 
\t this.forEach(function(item){ 
 
\t \t if (needsAccum){ 
 
\t \t \t accumulator = item; 
 
\t \t \t needsAccum = false; 
 
\t \t } 
 
\t \t else{ 
 
\t \t \t accumulator = callback(accumulator, item) 
 
\t \t } 
 
\t }) 
 
\t return accumulator; 
 
}

0

Итак, подведем итог часть вопроса:

«Как я могу использовать, чтобы _.each повторять, когда я иногда придется пропустить первую итерацию» - " не будет проходить через каждый индекс?

Для меня, я нашел решение было Погружает если/другое заявление в моем _.each

_.each(collection, function(value, index) { 
    if (accumulator === undefined){ 
    accumulator = item; 
    } else { 
    accumulator = iterator(accumulator, value); 
    } 
} 

В принципе, наложив свое, если заявление внутри _.each, а не перед ним. На первой итерации, если нет аккумулятора, петля переходит в «ПЧ» и пропускает «ELSE»

Смежные вопросы