期望结果是给定字符串中最长单词的长度(数字)。
Ex:findLongestWord('我喜欢炸玉米饼'); => 5
当我从结束开始循环时,我得到'无法读取未定义的长度'错误消息,并且当我开始循环时,我只获得'最长'的第一个新值。我错过了什么?
function findLongestWord(string) {
var longest = 0;
var array = string.split(' ');
for (var i = array.length; i >= 0; i--) {
if (array[i].length > longest) {
longest = array[i].length;
}
}
return longest;
}
答案 0 :(得分:1)
将您的转换为for (var i = array.length - 1; i >= 0; i--) {
如果数组索引中的4
个元素从0
开始到3
,那么在这种情况下array[4]
为undefined
答案 1 :(得分:1)
您的for
循环首先在i
索引上运行,该索引指向您尝试使用值array.length
访问的undefined
。
取自MDN,数组长度返回32位整数 总是数字gerater比数组的最高索引。
简而言之,array.length
是从零开始的索引。
所以修改你的代码就行了,
function findLongestWord(string) {
var longest = 0;
var array = string.split(' ');
for (var i = array.length - 1; i >= 0; i--) {
if (array[i].length > longest) {
longest = array[i].length;
}
}
return longest;
}
但是,这是你可以实现这一目标的另一种方式......
function findLongestWord(str){
var longestWord = '';
str.split(' ').forEach(function (v) {
longestWord = v.length > longestWord.length ? v : longestWord
});
return longestWord;
}
var word = findLongestWord('I like tacos');
console.log(longestWord, longestWord.length);
// tacos 5
答案 2 :(得分:1)
array.length返回n,数组中元素的数量,当我们使用索引从数组中获取元素时,它从0到n-1。 所以你必须使用array.length -1而不是array.length。
答案 3 :(得分:1)
使用.sort
将很容易。当您按DESC顺序对数组进行排序时,只需索引0即可获得最长的字符串。
function findLongestWord(string) {
var array = string.split(' ');
longest = array.sort(function(a,b){
return a.length < b.length;
});
return longest[0].length;
}
答案 4 :(得分:0)
感谢大家提出的好建议!我现在看到有更清洁/更短的方法来处理这个玩具问题,但我去添加了长度-1&#39;在我的循环中,因为它与我自己出现的最接近。
谢谢!