Как сложить результаты ключей

Данный код должен переводить из строк в цифры а так же сумму этих чисел

Например: BARSIC - это 16, ABC - это 6

function presses(phrase) {
  var num = {'1':1,'A':1,'D':1,'G':1,'J':1,'M':1,'P':1,'T':1,'W':1,' ':1,'*':1,'#':1,'B':2,'E':2,'H':2,'K':2,'N':2,'Q':2,'U':2,'X':2,'0':2,'C':3,'F':3,'I':3,'L':3,'O':3,'R':3,'V':3,'Y':3,'2':4,'3':4,'4':4,'5':4,'6':4,'S':4,'8':4,'Z':4,'7':5,'9':5};
  let NP = phrase.split('')
  
  NP.map(function(char) {
    let arr = num[char]
    console.log(arr)
  })
}

При вводе слова CFI вместо 9 выводит 3 3 3

Как правильно написать чтобы выводила сумму num[char]


Ответы (1 шт):

Автор решения: Sergey Glazirin

Если нужно преобразовать массив в какое-то число, то стоит использовать метод .reduce().

Во-вторых, у вас не было никакого суммирования вообще. Вы просто получали коды ваших символов и выводили их в консоль.

function presses(phrase) {
  var num = {
    '1': 1,
    'A': 1,
    'D': 1,
    'G': 1,
    'J': 1,
    'M': 1,
    'P': 1,
    'T': 1,
    'W': 1,
    ' ': 1,
    '*': 1,
    '#': 1,
    'B': 2,
    'E': 2,
    'H': 2,
    'K': 2,
    'N': 2,
    'Q': 2,
    'U': 2,
    'X': 2,
    '0': 2,
    'C': 3,
    'F': 3,
    'I': 3,
    'L': 3,
    'O': 3,
    'R': 3,
    'V': 3,
    'Y': 3,
    '2': 4,
    '3': 4,
    '4': 4,
    '5': 4,
    '6': 4,
    'S': 4,
    '8': 4,
    'Z': 4,
    '7': 5,
    '9': 5
  };
  let letters = phrase.split('');

  return letters.reduce((acc, item) => num[item] + acc, 0);
}

console.log(presses('BARSIC'));
console.log(presses('ABC'));
console.log(presses('CFI'));

→ Ссылка