2012-01-22 2 views
4

Я пытаюсь использовать уменьшить, чтобы вернуть массив так:Использование underscore.js может уменьшить возврат массива?

var myArray = [1,2,3]; 
_.reduce(myArray, function (seed, item) { return seed.push(item);}, []); 

Я ожидаю, что он будет производить массив так же, как туАггау. Вместо этого для первого элемента семя является массивом. Затем для второго элемента семя есть число. Это вызывает ошибку, и третий элемент никогда не достигается.

Что здесь происходит?

+1

Зачем вам нужно использовать 'сокращение', как это? Если вам нужно клонировать массив, вам лучше просто «нарезать» его. – dfsq

+0

Серьезно, это было бы намного лучше сделано как 'myArray.slice()' – Domenic

+0

Ну ... Это пример. Я действительно пытался сортировать массив в группы, которые, я знаю, могут быть выполнены с помощью _.sortBy(). Функционально говорящая карта и сокращение являются строительными блоками других более сложных функций распознавания списков. Поэтому мой вопрос выглядит так, чтобы понять, почему сокращение не возвращало список, что стало моим первым шагом на создание сортировки в группах, использующих только сокращение. – QueueHammer

ответ

13

Фактически, seed.push() не возвращает измененные seed. Сделайте следующее, и это правильно:

_.reduce(myArray, function (seed, item) { seed.push(item); return seed; }, []); 
Смежные вопросы