我刚开始学习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
循环来完成此操作。
答案 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"]
参考文献:
答案 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
方法:
var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"];
var longest = longWords.reduce(
(a, b) => a.length >= b.length ? a : b
);
console.log(longest);
&#13;