Как мне преобразовать строки в массиве в числа, используя forEach?

1

Я пытаюсь суммировать содержимое массива следующим образом:

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});
  • 0
    Пожалуйста, добавьте желаемый результат.
  • 0
    Что именно, по-вашему, происходит с результатом Number(item) ?
Показать ещё 2 комментария
Теги:
arrays

2 ответа

7
Лучший ответ

Примитивные значения не могут быть мутированы. Поэтому, когда вы выполняете 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);
//                                                             ^^^^^^^   ^
  • 0
    Да это оно. Благодарю. Не могу нажать на галочку в течение 3 минут.
  • 0
    Лучший ответ будет включать начальное значение, чтобы reduce . Попробуйте еще раз с var cardsBen = [] и посмотрите ,,,
Показать ещё 3 комментария
2

Вы можете использовать сокращение с неявным литьем в число с унарным плюсом +.

sum = array.reduce(function (s, v) {
    return s + +v;
}, 0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню