Если вы не знакомы с термином «анаграмма», позвольте рассказать вкратце,
Анаграмма — это слово или фраза, образованная путем перестановки букв другого слова или фразы, обычно с использованием всех исходных букв ровно один раз. [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(""));
}
Здесь мы сначала меняем регистр, а затем разбиваем на массив. Мы удаляем пробелы. Затем мы сортируем массив по алфавиту, затем соединяем массив со строкой и возвращаем результаты сравнения.
Если вы найдете лучшее решение, дайте мне знать.