分享
三行代码  ›  专栏  ›  技术社区  ›  kevin

将参数拆分为数组,现在在子作用域中获取未定义的

  •  0
  • kevin  · 技术社区  · 2 年前

    我发现了错误:

    uncaught typeerror:无法读取第5行上未定义的属性“length”

    当我把这个输入控制台时。我不知道它为什么说 senArr[i] undefined 当它被拆分成一个数组,然后传递到for循环时。

    我一直在想为什么这个错误会出现…

    -for循环确实有权访问父作用域

    -senarr被分割成一个数组,我认为获取存储在每个索引中的字符串的长度没有任何问题。

    出于想法,我开始认为问题出在代码中的其他地方。

    function LongestWord(sen) { 
        var senArr = sen.split(' ');
        var longestWord = senArr[0];
        for (let i = 1; i <= senArr.length; i++) {
           if (senArr[i].length > longestWord.length) {
               longestWord = senArr[i];   
           } 
        } return longestWord; 
    }
    
    4 回复  |  直到 2 年前
        1
  •  2
  •   slider    2 年前

    啊,换你的 <= < 因为数组中的最后一个索引是 senArr.length - 1

    function LongestWord(sen) {
      var senArr = sen.split(' ');
      var longestWord = senArr[0];
      for (let i = 1; i < senArr.length; i++) {
        console.log('i is ', i, ' and word is ', senArr[i]);
        if (senArr[i].length > longestWord.length) {
          longestWord = senArr[i];
        }
      }
      return longestWord;
    }
    
    console.log(LongestWord('hi there this is a test'));

    <= 你超越了上一个索引( i 在上面的例子中变成6),并且索引处没有字符串,这就是为什么您看到错误。

        2
  •  1
  •   Osama    2 年前

    问题是当您与<=进行比较时,包含数组长度+1请注意,数组是基于零的索引,因此最后一项是长度-1

        3
  •  0
  •   Marc M.    2 年前

    干得好。。。

    var LongestWord = (sen) => { 
        var senArr = sen.split(' ');
    
        console.log(senArr);
    
        var longestWord = '';
        for (let i = 0; i <= senArr.length - 1; i++) {
           if (senArr[i].length > longestWord.length) {
               longestWord = senArr[i];   
           } 
        } return longestWord; 
    }
    
    
    console.log(LongestWord('alongword is the longest'));
    
        4
  •  0
  •   Nils Alex Martelli    2 年前

    我刚刚把它转换成了现代的javascript,它工作了:-)

    function LongestWord(sentence) { 
        const words = sentence.split(' ');
        let longest = '';
        for (let word of words) {
            if (word.length > longest.length) {
                longest = word;
            } 
        } return longest; 
    }
    
    // notice that 'bar' is actually not the longest word
    // but the first of all longest words
    longestWord('fo bar baz'); // 'bar'