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

时间:2013-11-14 20:10:42

标签: javascript arrays

我刚开始学习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循环来完成此操作。

5 个答案:

答案 0 :(得分:3)

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

应该是

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

答案 1 :(得分:3)

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

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;
}

答案 2 :(得分:2)

我建议不要找到最长的单词,而是使用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 Fiddle demo

参考文献:

答案 3 :(得分:1)

var longest = 0;

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

答案 4 :(得分:1)

如果您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方法:

&#13;
&#13;
var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"];

var longest = longWords.reduce(
  (a, b) => a.length >= b.length ? a : b
);

console.log(longest);
&#13;
&#13;
&#13;