Обрабатывать ввод более чем одного символа

1

Я хочу дать числа буквам алфавита. Проблема в том, что я не знаю, как обрабатывать более одной буквы в одном значении; например, буква "A": 1 "E": 5 и "D": 4 должен возвращать 154, но в моем возврате кода указывается только номер последней буквы.

var alpha =[
  {   
    "A":1,  
    "B":2,  
    "C":3,   
    "D":4,   
    "E":5,  
    "F":6,  
    "G":7,  
    "H":8,  
    "I":9,  
    "J":10, 
    "K":11, 
    "L":12,
    "M":13,
    "N":14,
    "O":15,
    "P":16,
    "Q":17,
    "R":18,
    "S":19,
    "T":20,
    "U":21,
    "V":22,
    "W":23,
    "X":24,
    "Y":25,
    "Z":26,
  }
];

function bin(letter){

  for (var i = 0; i < alpha.length; i++){
      if(alpha[i].hasOwnProperty(letter)){
        return alpha[i][letter];
      }
  }

}

bin("R");bin("E");
  • 0
    Это похоже на проблему XY, вы должны посмотреть в charCodeAt
  • 2
    Пожалуйста, измените вопрос и название, это немного сложно понять.
Показать ещё 6 комментариев
Теги:

3 ответа

4

Вы можете взять строку, разделить ее на массив символов и использовать parseInt с радиусом 36, где вы получите значение для буквы. Позже присоедините результат к одной строке.

var string = 'aed',
    result = string
        .split('')
        .map(c => parseInt(c, 36) - 9)
        .join('');
        
console.log(result);

Даже более короткая версия с Array.from

var string = 'aed',
    result = Array.from(string, c => parseInt(c, 36) - 9).join('');
        
console.log(result);
  • 0
    Это подразумевается здесь, но, возможно, стоит упомянуть, что устраняет необходимость в альфа-объекте полностью. Хороший ответ.
1

Во-первых, нет никакой реальной причины, чтобы этот alpha объект находился в массиве:

var alpha = {   
  "A":1,  
  "B":2,  
  "C":3,   
  "D":4,   
  "E":5
  ...
}

ES5

Создайте пустую выходную переменную. Затем перебирайте буквы, добавляя каждый из них, который сопоставляет alpha значение выходной переменной. Затем просто верните выходную переменную.

function bin(letters) {
  var out = '';
  for (var i = 0; i < letters.length; i++){
    out += alpha[letters[i]]
  }
  return out;
}

bin("AED"); // 154

DEMO

ES6

Более краткий: делает строку итерируемой (оператор спредов), а затем отображает альфа-свойства, соединяется и возвращает отображаемые в конце.

function bin(letters) {
  return [...letters].map(letter => alpha[letter]).join('');
}

bin("AED"); // 154

DEMO

  • 0
    его не работает в демо извините, я просто начать с JS
  • 0
    Обе демонстрации работают. Посмотрите в консоли на результат.
-2

Вот пример кода JavaScript и ES6

function bin(str){
    var result = '';
  for(i=0;i < str.length; i++)
   result += parseInt(str[i], 36) -9;
  return result; 
}

function binES(str){
    return [...str].map(letter => parseInt(letter, 36) - 9).join('');
}

console.log(bin('AED'));
console.log(binES('AED'));

https://jsfiddle.net/of6grgvu/2/

  • 0
    Ты только что набрал код из моих ответов и ответов Нины, чтобы сделать свой собственный?
  • 0
    Ха-ха, если тебе так жаль. Однако для выполнения этой логики необходимо использовать цикл for в ядре JS и метод map в ES.
Показать ещё 2 комментария

Ещё вопросы

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