Во-первых, будет намного проще, если вы преобразуете свой список букв в массив и если вы также преобразуете свой список слов в массив.Затем вам нужно написать функцию компаратора для Array.prototype.sort
, которая подсчитывает количество букв, содержащихся в указанном массиве букв.Вот реализация, которая решает вашу проблему:
const letters = [
's', 'e', 'a', 'r', 'o', 'i', 'l', 't', 'n',
'u', 'd', 'c', 'y', 'p', 'm', 'h', 'g', 'b',
'k', 'f', 'w', 'v', 'z', 'x', 'j', 'q'
];
const wordList = [
'nymph',
'races',
'tundra'
];
console.log(wordList);
const sortedList = wordList.sort((a, b) => {
const aOccurences = letterOccurences(letters, a);
const bOccurences = letterOccurences(letters, b);
return aOccurences - bOccurences;
});
console.log(sortedList);
function letterOccurences(letters, word) {
let occurences = 0;
for (let i = 0; i < word.length; i++) {
if (letters.includes(word.substring(i, i+1))) {
occurences++;
}
}
return occurences;
}
Список ввода: nymph, races, tundra
Результат: tundra, nymph, races
(6, 5 и 5 вхождений соответственно.)
РЕДАКТИРОВАТЬ: Если вам нужно, чтобы я объяснил что-либо или если какой-либо синтаксис незнаком, сообщите мне.