有效地在字符串中找到 n 个最长的单词
Find n longest words in string efficiently
我们可以这样找到字符串中最长的单词:
str.split(" ").sort(function(a, b) {return b.length - a.length})[0];
如何高效地找到前n个最长的单词?例如,我如何提取前 3 个最长的单词,而不仅仅是 the longest?
你想要一个列表,从上到下排列?这就是排序的目的。您已经有了列表,只需从行尾删除 [0]
因为这意味着“访问列表的第一项”,并将其替换为 slice(0, 3)
以获得最后 3项目。
您可以使用 Array#slice
.
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'
const n = 2
const words = str.split(" ")
const uniqueWords = [...new Set(words)]
const longestWords = uniqueWords.sort((a, b) => b.length - a.length).slice(0, n)
console.log(longestWords)
由于.sort
returns 所有元素,按照你的顺序排序,你可以只循环结果。
删除代码的 [0]
部分以保留所有元素。
const string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
const counted = string.split(' ').sort(function(a, b) {return b.length - a.length});
for (let i = 0; i < 3; i++) {
console.log(i, counted[i]);
}
我们可以这样找到字符串中最长的单词:
str.split(" ").sort(function(a, b) {return b.length - a.length})[0];
如何高效地找到前n个最长的单词?例如,我如何提取前 3 个最长的单词,而不仅仅是 the longest?
你想要一个列表,从上到下排列?这就是排序的目的。您已经有了列表,只需从行尾删除 [0]
因为这意味着“访问列表的第一项”,并将其替换为 slice(0, 3)
以获得最后 3项目。
您可以使用 Array#slice
.
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'
const n = 2
const words = str.split(" ")
const uniqueWords = [...new Set(words)]
const longestWords = uniqueWords.sort((a, b) => b.length - a.length).slice(0, n)
console.log(longestWords)
由于.sort
returns 所有元素,按照你的顺序排序,你可以只循环结果。
删除代码的 [0]
部分以保留所有元素。
const string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
const counted = string.split(' ').sort(function(a, b) {return b.length - a.length});
for (let i = 0; i < 3; i++) {
console.log(i, counted[i]);
}