如何从数组中提取字符串中出现频次最高的前X个单词(降序)
解决方案
你已经算出了每个单词的出现次数,接下来只需要把单词和频次关联起来,排序后提取结果即可,完整代码如下:
const str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"; const array = ["a", "em", "i", "el"]; const X = 3; // 1. 关联每个单词与对应的出现频次 const wordFrequencyPairs = array.map(word => [word, str.split(word).length - 1]); // 2. 按出现频次降序排序 wordFrequencyPairs.sort((pairA, pairB) => pairB[1] - pairA[1]); // 3. 提取排序后的纯单词数组 const sortedWordArray = wordFrequencyPairs.map(pair => pair[0]); // 4. 获取前X个高频单词 const topXWords = sortedWordArray.slice(0, X); console.log(sortedWordArray); // 输出: ["i", "a", "em", "el"] console.log(topXWords); // 输出: ["i", "a", "em"]
步骤说明:
- 关联单词与频次:用
map遍历原单词数组,将每个单词和它的出现次数组成一个二元数组,这样就能把两者绑定在一起,避免排序时丢失对应关系。 - 降序排序:
sort方法里通过pairB[1] - pairA[1]实现按频次从高到低排序,如果两个单词频次相同,会保持它们在原数组中的顺序(稳定排序)。 - 提取单词数组:再次用
map把排序后的二元数组里的单词提取出来,得到只包含单词的排序数组。 - 截取前X个:用
slice(0, X)截取数组的前X个元素,就是你需要的结果。
另外,你原代码里有变量名错误:循环中用的words应该是array,s应该是str,修正后就能正常运行。
内容的提问来源于stack exchange,提问作者deftins12
相关产品推荐
相关产品推荐

