как можно улучшить данный код
Избежать лишних действий.
Например, незачем на каждом шаге снова разбивать и сортировать исходное слово – достаточно сделать это один раз:
function anagrams(word, words) {
const sample = word.split('').sort().join('');
return words.filter(function (e) {
return e.split('').sort().join('') === sample;
})
}
Нет смысла проверять неподходящие по длине слова.
function anagrams(word, words) {
const length = word.length;
const sample = word.split('').sort().join('');
return words.filter(w => w.length === length)
.filter(function (e) {
return e.split('').sort().join('') === sample;
})
}
P.S. я вот такое решение отправил. Сравнить длину. Привести к lowercase. Запоминать позиции, в которых найден очередной символ и дальше искать после этой позиции (если будут повторы этого же символа). Как только какой-то символ не найден – всё, не совпали.
Код// write the function isAnagram
var isAnagram = function(test, original) {
const length = original.length;
if (length !== test.length) return false;
const A = test.toLowerCase();
const B = original.toLowerCase();
const dict = {};
for (let i=0, char, pos; i < length; i++) {
char = A[i];
pos = B.indexOf(char, +dict[char]);
if (!~pos) return false;
dict[char] = pos + 1;
}
return true;
};