【问题标题】:"cannot read property 'split' of undefined"“无法读取未定义的属性‘拆分’”
【发布时间】:2018-04-20 09:49:30
【问题描述】:

我收到以下错误:

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

但是,附加了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");

【问题讨论】:

  • 您是要遍历每个单词,还是要遍历每个字符?弄清楚这一点,然后您就可以确定需要删除哪一行
  • 你的预期输出是什么?
  • str.length 是 44。array 有 9 个元素。当您访问array[10] 时,您认为会发生什么?

标签: javascript arrays function for-loop split


【解决方案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");

【讨论】:

  • 好答案。 OP 也应该知道他的功能还没有完全发挥作用,但这是重要的一步
  • @wassona,我无法从上面的代码中获得输出.....是吗?
  • @Mamun,上面的代码不会产生输出。您需要在某处输入return 语句才能获得输出。顺便说一下,这个功能还没有完成,但是你已经有了一个好的开始。我会在其中的几个地方添加一些console.logs,以跟踪正在发生的事情以及您获得的结果,并考虑如何从结果中找到最长的单词。抱歉,如果这有点令人沮丧,但我当了很长一段时间的老师,并且很喜欢帮助人们,这样他们就可以自学了。
  • @wassona,我什至尝试从函数返回array,但没有预期的输出。我对答案很感兴趣,因为您将答案称为“好答案”......谢谢。
  • 抱歉,我可以提供更多帮助。从您的代码中,array[i].split(""); 是一个不错的选择,但它没有分配给变量,因此.split 操作正在发生,然后结果立即被丢弃。你应该做类似var wordLetters = array[i].split(""); 的事情。然后,您可以使用.length 来计算该单词中有多少个字母。所有其他解决方案都应该有效(尽管 C. Sanchez 留了一步让您弄清楚),但是您尝试解决问题的方式虽然更长一点,但更简单,而且我认为这是一个更好的介绍编程原则。
【解决方案2】:

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

array[i].split("");

你必须这样做:

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

【讨论】:

    【解决方案3】:

    您可以直接申请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; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-04
      • 2022-01-18
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多