查找数组中最长的单词/字符串

Find the longest word/string in an array

本文关键字:单词 字符串 数组 查找      更新时间:2023-09-26

我刚开始学习JavaScript。我正在尝试编写一个JavaScript来查找和打印数组中最长的单词。我想出了下面的代码:

var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"]
var longest = 0;
for (var i = 0; i < longWords.length; i++) {
if (longest < longWords[i].length) {
    longest = longWords[i];
  }
}
console.log(longest)

问题是它总是最终打印数组中的第一个元素。 这意味着longest = longWords[0] .现在,当我将行longest = longWords[i]更改为longest = longWords[i].length时,我得到了最长字符的计数。请告诉我为什么它不起作用以及我如何使用for循环执行此操作。

if (longest < longWords[i].length) {

应该是

if (longest.length < longWords[i].length) {

您可以根据字符串长度自定义排序,并抓取第一项:

longWords.sort(function(a, b) { 
    return b.length - a.length; 
});

这会将您的阵列转换为以下内容:

["Czechoslovakia", "Aubumayang", "Penelope", "Slovenia", "Johny"]

此时,您可以抓住第一项。但请注意,紧跟在第一个字符串之后的其他字符串可能具有相同的长度。

至于你上面的代码,longest被声明为一个数字,但后来设置为一个字符串。我们感兴趣的数字来自字符串的长度。我们的条件应该是:

// No sense in looking this up twice
current = longWord[i];
if ( longest.length < current.length ) {
    longest = current;
}

与其找到最长的单词,我建议使用Array.prototype.sort()按元素的降序长度对数组进行排序:

var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"],
    sorted = longWords.sort(function (a, b) {
    return a.length < b.length;
});
console.log(sorted);
// ["Czechoslovakia", "Aubumayang", "Penelope", "Slovenia", "Johny"]

JS小提琴演示。

引用:

  • Array.sort() .
var longest = 0;
for (var i = 0; i < longWords.length; i++) {
    if ( longWords[i].length > longest.length ) {
        longest = longWords[i];
    }
}

如果您sort数组并打印第一个元素arr.[0],我可以轻松打印最长的单词


var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"];
var sorted = longWords.sort((a, b) => b.length - a.length );
console.log(sorted[0]);
// "Czechoslovakia"

还有另一种获取最长元素的好方法,那就是使用 reduce 方法:

var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"];
var longest = longWords.reduce(
  (a, b) => a.length >= b.length ? a : b
);
console.log(longest);

let longest = 0;
for (let i = 0; i < longWords.length; i++) {
  let word = longWords[i];
  if (longest < word.length) {
    longest = word.length;
  }
}
console.log(longest);