我有array
个单词和以下字母列表:
searoiltnudcypmhgbkfwvzxjq
我想按照此列表中的字母顺序对array
进行排序,以便首先显示列表开头附近字母数量最多的单词。例如:以下内容:
var wordList = "nymph, races, tundra";
一旦排序,应该是:
wordList = "races, tundra, nymph";
到目前为止,我有以下内容为列表中的每个字母指定权重:
for (let h = 0; h < freqWords.length; h++) {
this["freq" + h] = h;
}
接下来,我必须根据数组中包含的这些变量的数量为数组中的每个单词赋值,然后从最低值到最高值进行排序。不幸的是,我不知道实现这一目的的语法。
答案 0 :(得分:2)
较短的声明性功能风格替代方案:
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;
});
答案 1 :(得分:1)
首先,如果将字母列表转换为数组,并将单词列表转换为数组,则会更容易。然后,您将需要为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次)。
编辑:如果您需要我解释任何内容或有任何语法不熟悉,请与我们联系。