“无法读取未定义的属性‘split’”

新手上路,请多包涵

我收到以下错误:

无法读取未定义的属性“拆分”

但是,带有附加方法的 split array 变量已在前面的代码行中正确定义。

 function findLongestWord(str) {

  for (i = 0; i < str.length; i++) {
    var array = str.split(" ");
    array[i].split("");
  }
}

findLongestWord("The quick brown fox jumped over the lazy dog");

原文由 Adrian Danlos 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 884
2 个回答

str.length 其实是字符串中的字母个数,而array是单词的数组。这就是为什么 i 最多可以达到 45,而你的数组只有 9 个元素 - 这就是为什么当它试图访问 array[10] 它变得未定义并且无法拆分它。这应该有助于:

 function findLongestWord(str) {
  var array = str.split(" ");
  for (i = 0; i < array.length; i++) {
    array[i].split("");
  }
}

findLongestWord("The quick brown fox jumped over the lazy dog");

如果你想让它实际返回最长的单词,你需要做这样的事情:

 function findLongestWord(str) {
  var longestWord = ""
  var array = str.split(" ");
  for (i = 0; i < array.length; i++) {
    if(array[i].length > longestWord.length){
      longestWord = array[i]
    }
  }
  return longestWord
}

findLongestWord("The quick brown fox jumped over the lazy dog");

原文由 Michał Sadowski 发布,翻译遵循 CC BY-SA 3.0 许可协议

str.length 得到字符串计数字符的长度,所以 44,然后你用空格分割,所以你得到单词但是你继续调用字符串中每个字符的索引,以获得最长的单词而不是:

 array[i].split("");

你必须这样做:

 var longest = "";
array.forEach(function(word) {
    if(word.length > longest.length) {
      longest = word;
    }
});

原文由 C. Sanchez 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题