[英]Sorting an array by most occurrences of certain letters
我有一个单词array
和以下字母列表:
searoiltnudcypmhgbkfwvzxjq
我想按此列表中的字母顺序对array
进行排序,以便首先出现在列表开头附近的字母数量最多的单词。 例如:以下内容:
var wordList = "nymph, races, tundra";
排序后,应为:
wordList = "races, tundra, nymph";
到目前为止,我可以为列表中的每个字母分配权重:
for (let h = 0; h < freqWords.length; h++) {
this["freq" + h] = h;
}
接下来,我必须根据数组中包含的这些变量的数量为数组中的每个单词赋予一个值,然后从最低值到最高值进行排序。 不幸的是,我不知道完成此操作的语法。
较短的声明性功能样式替代:
const letters = 'searoiltnudcypmhgbkfwvzxjq';
const input = "nymph, races, tundra"
const sorted = input.split(',').map(str => str.trim()).sort((aWord, bWord) => {
const aCount = aWord.split('').filter(char => letters.includes(char)).length;
const bCount = bWord.split('').filter(char => letters.includes(char)).length;
return bCount - aCount;
});
首先,如果将字母列表转换为数组,并将单词列表转换为数组,也将容易得多。 然后,您将需要为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
(分别出现tundra, nymph, races
和5次。)
编辑:如果您需要我解释任何事情,或者任何语法不熟悉,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.