Я пытаюсь преобразовать сообщение со шрифтом по умолчанию в шрифт «steamwave», но когда он находит букву, которая не определена, возвращается undefined, как я могу заставить его пропустить эту букву, которая не была определена, и оставить оригинальный?

font = {
    "A": "A",
    "B": "B",
    "C": "C",
    "D": "D",
    "E": "E",
    "F": "F",
    [...]
}

const string = "hello world"
const vapour = string.split('').map(letter => {
  return font[letter];
}).join('');

//return for example, "undefined EL L O [...]"
//i want: "h EL L O [...]"


3
Dyoferzn 9 Окт 2021 в 22:08

3 ответа

Лучший ответ

Вы можете заменить font[letter] исходной буквой:

const vapour = string.split('').map(letter => {
  return font[letter] || letter;
}).join('');

Или я бы предпочел построить регулярное выражение из ключей объекта:

const pattern = new RegExp('[' + Object.keys(font).join('') + ']', 'g');
const vapour = string.replace(pattern, char => font[char]);
4
CertainPerformance 9 Окт 2021 в 19:09

Используйте нулевой оператор объединения (??) https://developer.mozilla.org/en- США / docs / Web / JavaScript / Reference / Operators / Nullish_coalescing_operator

const vapour = string.split('').map(letter => {
  return font[letter] ?? letter;
}).join('');
1
Naor Tedgi 9 Окт 2021 в 19:10

Почему бы просто не проверить, есть ли буква в словаре?

font = {
    "A": "A",
    "B": "B",
    "C": "C",
    "D": "D",
    "E": "E",
    "F": "F",
}

const string = "ABCDEFG123"
const vapour = string.split('').map(letter => {
  if (letter in font) {
    return font[letter];
  } else {
    return letter
  }
}).join('');
console.log(string, "-->", vapour);
0
Programmer 9 Окт 2021 в 19:15