Javascript 有效地查找字符串中的n个最长单词

Javascript 有效地查找字符串中的n个最长单词,javascript,string,sorting,charactercount,Javascript,String,Sorting,Charactercount,我们可以在这样的字符串中找到最长的单词: str.split(" ").sort(function(a, b) {return b.length - a.length})[0]; 如何有效地找到前n个最长单词?例如,如何提取前3个最长的单词,而不仅仅是最长的单词?是否需要从上到下排列的列表?这就是排序的目的。您已经有了列表,只需从行的末尾删除[0],因为这意味着“访问列表的第一项”,然后用切片(0,3)替换它,以获取最后3项。您可以使用数组#切片 str.split(&qu

我们可以在这样的字符串中找到最长的单词:

str.split(" ").sort(function(a, b) {return b.length - a.length})[0];

如何有效地找到前n个最长单词?例如,如何提取前3个最长的单词,而不仅仅是最长的单词?

是否需要从上到下排列的列表?这就是排序的目的。您已经有了列表,只需从行的末尾删除
[0]
,因为这意味着“访问列表的第一项”,然后用切片(0,3)替换它,以获取最后3项。

您可以使用
数组#切片

str.split(" ").sort(function(a, b) {return b.length - a.length}).slice(0,3)

如果您不想获得唯一的单词,可以使用
slice
方法

const n = 3
const longestWords = str.split(" ").sort(function(a, b) {return b.length - a.length}).slice(0, n)
但是,如果同一个单词出现多次,您可能会在输出中多次看到它。例如,“foo-bar-fooy-fooy”将导致
['fooy',fooy',bar']

要消除此问题,请先将初始数组转换为集合

const str='foo bar fooy fooy'
常数n=2
const words=str.split(“”)
const uniqueWords=[…新集合(单词)]
const longestWords=uniqueWords.sort((a,b)=>b.length-a.length).slice(0,n)
log(longestWords)
由于返回按您的顺序排序的所有元素,因此您可以循环结果

删除代码的
[0]
部分以保留所有元素

const string='Lorem ipsum door sit amet,concetetur adipsicing elit';
const counted=string.split(“”).sort(函数(a,b){返回b.length-a.length});
for(设i=0;i<3;i++){
console.log(i,counted[i]);

}
为什么不将
[0]
替换为,比如用一些符号来切掉排序数组中的前3项?我对JS很生疏,但在Python中它应该是
[:3]
。我认为这是
.slice(0,3)
?正如Arya所说,您可以切片并获得'n'个单词:例如:str.split(“”).sort(函数(a,b){return b.length-a.length})。slice(0,3)具有前n个堆排序。