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

时间:2018-04-20 09:49:30

标签: javascript arrays function for-loop split

我收到以下错误:

  

无法读取未定义

的属性'split'

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以尝试split()reduce(),如下所示:

&#13;
&#13;
function findLongestWord(str) {
  str = str.split(' ').reduce(function(a, b) { 
    return a.length > b.length ? a : b;
  }, '');
  
  return str;
}

console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));
&#13;
.as-console-wrapper{
  top: 0;
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以直接应用split(" ")并使用reduce()数组方法来获取所需的结果。

  

reduce()方法对累加器和数组中的每个元素(从左到右)应用函数,将其减少为单个值。

<强>样本

const str = "The quick brown fox jumped over the lazy dog";

let result = str.split(" ").reduce((r, v) => r.length > v.length ? r : v, '');

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:0)

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

array[i].split("");

你必须这样做:

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