2

我刚开始学习 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循环来做到这一点。

4

5 回答 5

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;
}
于 2013-11-14T20:13:22.463 回答
3
if (longest < longWords[i].length) {

应该是

if (longest.length < longWords[i].length) {
于 2013-11-14T20:12:20.833 回答
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 小提琴演示

参考:

于 2013-11-14T20:15:48.987 回答
1
var longest = 0;

for (var i = 0; i < longWords.length; i++) {
    if ( longWords[i].length > longest.length ) {
        longest = longWords[i];
    }
}
于 2013-11-14T20:12:21.420 回答
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方法:

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

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

console.log(longest);

于 2015-10-12T15:15:26.620 回答