按单独数组中唯一条目的数量对JS数组进行排序



那么,我有一个单词数组。让说

const wordList = [    
"aa",
"aah",
"aahed",
"aahing",
"aahs",
"aal",
"aalii",
"aaliis",
"aals",
"aardvark",
"aardvarks",
"aardwolf",
"aardwolves",
"aargh",
"aarrgh",
"aarrghh",
"aarti",
"aartis",
"aas",
"aasvogel",
"aasvogels",
]
现在,假设我有一个单独的字母数组a - y(不包括X)称为letters

我要做的是根据letters中包含的元素数量对wordList进行排序。在这里,"arrdwolved"的排名相当高,因为它有9个唯一的字母(例如,字母只计算一次)。然后,将wordlist第一个元素中的字母从数组中移除,直到letters中剩下元素,然后重置letters

你知道怎么做吗?我在这里完全空白。

我想象你可以循环遍历每个字符串中的每个字母,保存一个已经"评分"的字母列表。然后在此基础上排序,但我不知道如何实现它。

您可以使用Set来获取唯一字符的数量,然后使用Array.sort:

const wordList=["aa","aah","aahed","aahing","aahs","aal","aalii","aaliis","aals","aardvark","aardvarks","aardwolf","aardwolves","aargh","aarrgh","aarrghh","aarti","aartis","aas","aasvogel","aasvogels"];
const numOfUnique = (s) => new Set(s).size
const result = wordList.sort((a, b) => numOfUnique(b) - numOfUnique(a))
console.log(result)

要过滤掉不在字母列表中的字母,您可以在获得唯一字母的数量时使用Array.filter:

const wordList=["aa","aah","aahed","aahing","aahs","aal","aalii","aaliis","aals","aardvark","aardvarks","aardwolf","aardwolves","aargh","aarrgh","aarrghh","aarti","aartis","aas","aasvogel","aasvogels"];
const letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'y']
const numOfUnique = (s) => [...new Set(s)].filter(e => letters.includes(e)).length
const result = wordList.sort((a, b) => numOfUnique(b) - numOfUnique(a))
console.log(result)

您可以用分数构建一个对象,并按这些值降序排序。

const
wordList = ["aa", "aah", "aahed", "aahing", "aahs", "aal", "aalii", "aaliis", "aals", "aardvark", "aardvarks", "aardwolf", "aardwolves", "aargh", "aarrgh", "aarrghh", "aarti", "aartis", "aas", "aasvogel", "aasvogels"],
scores = Object.fromEntries(wordList.map(s => [
s,
new Set(s).size
]));
wordList.sort((a, b) => scores[b] - scores[a]);
console.log(wordList);
console.log(scores);
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新