2015-02-21 2 views
1

Помогите; Я пытаюсь решить эту проблему:Javascript _.reduce() Упражнение

Напишите функцию, которая принимает массив имен и поздравляет их. Обязательно используйте _.reduce как часть функции.

вход:

['Steve', 'Sally', 'George', 'Gina'] 

выход:

'Congratulations Steve, Sally, George, Gina!' 

Вот что я до сих пор, но не работает:

var myArray = _.reduce(['Steve', 'Sally', 'George', 'Gina'], function(current, end) { 
return 'Congratulations' + current + end; 
}); 
+1

Почему должен '_.reduce' работать, если вы используете рамки вы не упомянули или ваш массив называется' _'. – Mouser

+0

Я предполагаю, что _.resume() из [Underscore.js] (http://underscorejs.org/#reduce). Вы включили его? – Reeno

ответ

3

Вы можете сделать это следующим образом:

var myArray = 'Congratulations ' + _.reduce(['Steve', 'Sally', 'George', 'Gina'], function(current, end) { 
    return current + ', ' + end; 
}); 

// "Congratulations Steve, Sally, George, Gina" 

Но уменьшить это не самый удобный инструмент для этого, просто join чувствует себя более естественно:

'Congratulations ' + ['Steve', 'Sally', 'George', 'Gina'].join(', '); 
+0

спасибо !! это имеет смысл для меня. –

0

Здесь вы идете полный reduce:

['Steve', 'Sally', 'George', 'Gina'].reduce(function(o,n, i, a){ var e=(i===(a.length-1))?"!":","; return o+n+e; }, "Congratulations ") 

1) вы должны использовать «Поздравляем», как первый элемент reduce(f, initial) см. mdn

2) у вас есть два случая: а) последний элемент не достигнут, поэтому добавьте "," b) еще добавить "!". Это выполняется с проверкой текущего индекса на длину массива i===(a.length-1)

+0

Javascript 2015 эквивалент: ['Steve', 'Sally', 'George', 'Gina']. Reduce ((o, n, i, ar) => i === (ar.length - 1)? '$ {o}, $ {n}! ':' $ {o}, $ {n} '," Поздравляем ") – jgran

1

Это мое решение, которое использует все параметры функции уменьшения.

var people = ["Steve", "Sally", "George", "Gina"]; 

people.reduce(
    function(prev, curr, currIndex, array){ 
    if(currIndex === array.length - 1){ 
     return prev + curr + "!"; 
    } else{ 
     return prev + curr + ", "; 
    } 
    }, "Congratulations "); 
1
['Steve', 'Sally', 'George', 'Gina'].reduce(
    (a, b, i) => a + " " + b + (i <= this.length + 1 ? "," : "!"), 
    "Congratulations" 
) 
Смежные вопросы