2015-02-22 1 views
1

Может ли кто-нибудь помочь мне с этой проблемой? Я пытаюсь использовать
(Подчеркивание) _.reduce, чтобы объединить все строки в массиве.concatenate с помощью подстроки уменьшает?

вход:

['x','y','z'] 

выход:

'xyz' 

Вот как я начал:

_.reduce(['x','y','z'], function(current, end) { 
    return... 
}); 
+0

Не уверен, если это полезно или нет, но если вы хотите копать немного глубже в использовании складка (или уменьшите, как подчеркивает Underscore), посмотрите этот документ: http://www.cs.nott.ac.uk/~gmh/fold.pdf –

ответ

5

Вы можете просто использовать Array.prototype.join здесь. Это было бы более эффективно, чем reduce для этого случая.

console.log(['x','y','z'].join("")); 
// xyz 

Но если вы хотите использовать _.reduce, вы можете сделать это, как этот

_.reduce(['x', 'y', 'z'], function(accumulator, currentItem) { 
    return accumulator + currentItem; 
}); 
// xyz 

_.reduce просто обертка над родной Array.prototype.reduce в средах, которые поддерживают его. Вы можете понять, как reduce будет обрабатывать ввод, от this answer, в деталях.

Вот краткое объяснение.

Поскольку начальное значение не передано _.reduce, первое значение в коллекции будет использоваться как значение аккумулятора, а функция вызывается с использованием значения аккумулятора и второго значения. Таким образом, функция вызывается как этот

accumulator : 'x' 
currentItem : 'y' 
----------------- 
accumulator : 'xy' (because returned value will be passed again as accumulator) 

и при следующем вызове,

accumulator : 'xy' 
currentItem : 'z' 
----------------- 
accumulator : 'xyz' (since no elements left, accumulator will be returned) 
+0

один вопрос, хотя ... что именно означают параметры функции? могут ли они быть любыми переменными? –

+0

@RoryPerro я включил немного больше объяснений. Пожалуйста, проверьте это. Да, параметры могут иметь любые имена (если это то, что вы пытаетесь спросить) – thefourtheye