返回字符串中最长单词的长度(Javascript)

时间:2016-06-28 00:49:17

标签: javascript arrays string

期望结果是给定字符串中最长单词的长度(数字)。

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

5 个答案:

答案 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;在我的循环中,因为它与我自己出现的最接近。

谢谢!