Я пытаюсь суммировать содержимое массива следующим образом:
var cardsBen = [10,2]
var cardsAmy = [4,10]
Когда я использую цикл for, он работает.
for(var i = 0; i < cardsBen.length; i++){
cardsBen[i] = Number(cardsBen[i]);
}
Когда я использую forEach, он не конвертируется.
cardsAmy.forEach(function(item)
{
Number(item);
});
Я знаю это, потому что, когда я уменьшаю массивы, я получаю 12 для Бена и 410 для Эми.
var sumBen = cardsBen.reduce(function(sum, nbr){return sum + nbr});
var sumAmy = cardsAmy.reduce(function(sum, nbr){return sum + nbr});
Примитивные значения не могут быть мутированы. Поэтому, когда вы выполняете Number(item)
вы должны назначить это обратно массиву, например:
cardsAmy.forEach(function(item, i) {
cardsAmy[i] = Number(item);
});
И вы можете сделать это непосредственно в reduce
(без необходимости использования выше для кода forEach
), например:
var sumBen = cardsBen.reduce(function(sum, nbr) { return sum + Number(nbr); }, 0);
// ^^^^^^^ ^
reduce
. Попробуйте еще раз с var cardsBen = []
и посмотрите ,,,
Вы можете использовать сокращение с неявным литьем в число с унарным плюсом +
.
sum = array.reduce(function (s, v) {
return s + +v;
}, 0);
Number(item)
?