JS Проверка массива слов на анаграммы с помощью функции
Необходимо написать функцию checkAnagram, которая будет проверять, являются ли перечисленные слова в массиве анаграммами.
Аргументом функции checkAnagram является массив строк, которые нужно проверить.
Возвращаемое значение — true/false в зависимости от того можно ли все слова массива составить из одних и тех же букв.
Ответы (3 шт):
Автор решения: lost_keeper
→ Ссылка
Вроде работает, но если это полотно возможно оптимизировать, не откажусь от советов :D
function checkAnagram(anagramArray) {
let total = 0;
if (anagramArray == 0 || anagramArray.length == 1)
total = false;
else{
for (let i = 0; i < anagramArray.length; i++) {
let firstWord = anagramArray[0].split("").sort().join("");
if (anagramArray[i].split("").sort().join("") == firstWord) {
total = true;
} else
total = false;
}
}
return total;
}
Автор решения: Zhihar
→ Ссылка
можно вот такой вариант:
const is_correct = arr.filter(obj => obj.split('').sort().join('').localeCompare(arr[0].split('').sort().join('')) === 0).length === arr.length;
Автор решения: OPTIMUS PRIME
→ Ссылка
Ваш вариант, немного подправленный (дополнительная переменная была не нужна):
console.log(checkAnagram(["aabbcc", "ababcc", "abcabc"])); // true
console.log(checkAnagram(["aabbcc", "ababcF", "abcabc"])); // false
function checkAnagram(arr) {
if (!arr || arr.length <= 1) return false;
// Нет массива, или её длина 0 или 1, сразу на выход.
let first_word = arr[0].split("").sort().join("");
for (let i = 1; i < arr.length; i++) {
// от i = 1, не 0
if (arr[i].split("").sort().join("") != first_word) {
// Если вдруг [i]-тый элемент оказался не равным, можно не продолжать цикл
return false;
// Прямо отсюда выйти из функции, вернув false.
}
}
return true;
// Цикл добежал и не прервался, значит все слова оказались равны
}
Можно еще взять и посчитать количество букв:
console.log(checkAnagram(["aabbcc", "ababcc", "abcabc"])); // true
console.log(checkAnagram(["aabbcc", "ababcF", "abcabc"])); // false
function checkAnagram(arr) {
if (!arr || arr.length <= 1) return false;
let wordSize = arr[0].length;
let wordLetters = countLetters(arr[0]);
console.log( wordLetters );
for (let i = 1; i < arr.length; i++) {
if (arr[i].length != wordSize) return false; // Ширина не равна - до свидания
let currLetters = countLetters(arr[i]);
for (let letter in wordLetters) { // бежит по буквам эталонного слова
if (wordLetters[letter] != currLetters[letter]) return false;
// Все буквы, что были там, должны быть и в currLetters, в том же кол-ве.
}
}
return true;
/***/
function countLetters(str) {
let dictionary = {};
for (let letter of str) {
dictionary[letter] = (dictionary[letter] || 0) + 1;
// dictionary[letter] — undefined? (буква не встречалась || возьмется 0) + 1
}
return dictionary;
}
}