Как определить «Анаграмму» с помощью JavaScript?

Если вы не знакомы с термином «анаграмма», позвольте рассказать вкратце,

Анаграмма — это слово или фраза, образованная путем перестановки букв другого слова или фразы, обычно с использованием всех исходных букв ровно один раз. [1]

Итак, нам нужно написать функцию, которая будет принимать две строки в качестве аргументов, а функция будет сравнивать, являются ли они анаграммами или нет.

Сначала определим функцию,

function checkAnagram(stringOne, stringTwo){

}
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь логическая часть,

Если вы внимательно читали, анаграммой может быть слово или фраза. Это значит, что если это фраза, то она будет содержать пробелы, и количество пробелов может быть разным в обеих строках, но это все равно может быть анаграммой. например,

‘Обезьяна пишет’ и ‘Нью-Йорк Таймс’.

Обе строки имеют разную капитализацию и разное количество пробелов, но они все равно являются анаграммами. Поэтому мы должны быть нечувствительны к регистру и удалять пробелы из строк, если они есть.

function checkAnagram(stringOne, stringTwo){
  let a = stringOne
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();
  let b = stringTwo
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();
}
Вход в полноэкранный режим Выход из полноэкранного режима

Здесь мы объявили две переменные и храним каждую строку в версии со строчными буквами и удаленными пробелами. 

Теперь нам нужно отсортировать их по алфавиту и сравнить обе строки. Если они совпадают, то функция вернет true. в противном случае false.

function checkAnagram(stringOne, stringTwo){
  let a = stringOne
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();
  let b = stringTwo
    .split("")
    .filter((l) => l !== " ")
    .join("")
    .toLowerCase();

  return a.split("").sort().join("") === b.split("").sort().join("");

}
Вход в полноэкранный режим Выйти из полноэкранного режима

Последняя строка разделяет строки и сортирует их по алфавиту, затем соединяет буквы вместе, получая сравниваемый результат.

Теперь мы можем рефакторить этот код, чтобы он стал короче. Я написал длинную версию, чтобы вы могли понять.

function checkAnagram(stringOne, stringTwo) {
    return (stringOne.toLowerCase().split("").filter((l) => l !== " ").sort().join("") ===
        stringTwo.toLowerCase().split("").filter((l) => l !== " ").sort().join(""));
}
Вход в полноэкранный режим Выход из полноэкранного режима

Здесь мы сначала меняем регистр, а затем разбиваем на массив. Мы удаляем пробелы. Затем мы сортируем массив по алфавиту, затем соединяем массив со строкой и возвращаем результаты сравнения.

Если вы найдете лучшее решение, дайте мне знать.

Оцените статью
devanswers.ru
Добавить комментарий