2016-12-26 2 views
1

Я пытаюсь написать функцию, которая постоянно добавляет вместе первый и последний элементы массива, используя forEach с array.shift() + array.pop().Итеративное сложение первого и последнего чисел в массиве

Проблема в том, что for-loop не заполняет самые внутренние числа, и поэтому массив всегда остается с двумя значениями внутри него.

Код:

function choreAssignment(chores) { 
    chores.sort(function(a, b) {return a - b}); 
    var assignment = []; 
    chores.forEach(function() { 
    assignment.push((chores.pop() + chores.shift())); 
}); 
    return assignment.sort(function(a, b) {return a - b}); 
} 

Приведенный выше код работает, как ожидалось, но он оставляет сокровенные два значения внутри chores массива.

Например, если я бегу:

Код:

var arr = [1, 4, 7, 2, 5, 9, 4, 3]; 
choreAssignment(arr); 

я получаю:

[8, 9, 10] 

Т.е., это добавляет 9 & 1, 7 & 2, 5 & 3 , но он оставляет [4, 4] внутри массива.

Я не уверен, почему это так. Спасибо.

+1

Ваш пример и описание, кажется, не совпадают. Я ожидаю, что выход будет «[4, 8, 16, 7]» для ввода образца [[1, 4, 7, 2, 5, 9, 4, 3] ». – pzp

+0

Сначала он сортирует алгоритм работы с наименьшим значением до самого большого. Поэтому перед использованием> shift() и pop() значения перечислены как [1, 2, 3, 4, 4, 5, 7, 9], поэтому он объединяет 9 + 1, 7 + 2 и 5 + 3 , но не 4 + 4 по какой-то причине. –

ответ

3

Попробуйте изменить Foreach к:

while (chores.length) { 
    assignment.push((chores.pop() + chores.shift())); 
} 

Примечание это предполагает, что есть всегда четное число элементов в массиве

+0

Спасибо, это сработало. Не могли бы вы рассказать о том, почему этот метод работал, но для каждого не было? Я не понимаю, почему нужно работать, а не другого. –

+0

@JonathanBechtel Как правило, это плохая идея удалить элементы из массива, когда вы выполняете итерацию по нему. – pzp

+0

@pzp благодарим вас за отзыв. Я думал об использовании сокращения, но не связывал точки для него, поэтому я пошел с этим методом. Это не будет использоваться в производстве, это просто пинает шины. –

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