2013-11-14 70 views
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循环来做到这一点。

+2

您是否需要处理两个单词长度相等并且都最长的用例? –

回答

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

或许应该

if (longest.length < longWords[i].length) { 
1
var longest = 0; 

for (var i = 0; i < longWords.length; i++) { 
    if (longWords[i].length > longest.length) { 
     longest = longWords[i]; 
    } 
} 
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

而不是寻找最长的话,我会建议由降其元素的长度,使用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

参考文献:

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

相关问题