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

for循环不迭代修正

  •  0
  • kevin  · 技术社区  · 1 年前
    function LongestWord(sen) { 
        let arr = sen.split(' ');
        let longestWord;
        for (let i = 0; i < arr.length; i++) {
            let counter = 0;
            if (arr[i].length > counter) {
                counter = arr[i].length;
                longestWord = arr[i];
            }
        }
        return longestWord;
    };
    

    这个函数的目标是循环遍历一个数组并找到最长的单词。我一直在看这个,一切似乎都是正确的,虽然,很明显有些事情是错误的,但我没有看到。

    7 回复  |  直到 1 年前
        1
  •  1
  •   Code Maniac    1 年前

    您需要使用for循环之外的计数器。因为每次在for循环被重新初始化时都使用in。

    function LongestWord(sen) { 
        let arr = sen.split(' ');
        let longestWord;
        let counter = 0;
        for (let i = 0; i < arr.length; i++) {
            if (arr[i].length > counter) {
                counter = arr[i].length;
                longestWord = arr[i];
            }
        }
        return longestWord;
    };
    
    console.log(LongestWord('heya 1 2'))
        2
  •  2
  •   Ryan Wilson    1 年前

    这是因为您在每次迭代中将count设置为零,即重写为

    function LongestWord(sen) { 
    let arr = sen.split(' ');
    let longestWord;
    
    let counter = 0;  // Moved here!!!
    
    for (let i = 0; i < arr.length; i++) {
        if (arr[i].length > counter) {
            counter = arr[i].length;
            longestWord = arr[i];
        }
    }
    return longestWord;
    

    };

        3
  •  2
  •   Siavash    1 年前

    我知道这是一个完全不同的方法,但是您可以使用这个更简洁的代码实现相同的结果,并且不需要应用任何循环结构:

    function LongestWord(sen) { 
      let arr = sen.split(' ');
      return arr.sort(function(a, b){
        // Sort Descending
        return b.length - a.length;
      })[0]; // Take first and longest element
    }
    
        4
  •  1
  •   Leroy Stav    1 年前

    每次迭代都要重新定义计数器。

    function LongestWord(sen) { 
        let arr = sen.split(' ');
        let longestWord;
        let counter = 0;
    
        for (let i = 0; i < arr.length; i++) {
            if (arr[i].length > counter) {
                counter = arr[i].length;
                longestWord = arr[i];
            }
        }
        return longestWord;
    };
    
        5
  •  1
  •   Nina Scholz    1 年前

    你需要定义洗手间外的柜台,因为你需要它来保持长度。

    function longestWord(sen) { 
        let arr = sen.split(' ');
        let longestWord;
        let counter = 0;
        for (let i = 0; i < arr.length; i++) {
            if (arr[i].length > counter) {
                counter = arr[i].length;
                longestWord = arr[i];
            }
        }
        return longestWord;
    }
    
    console.log(longestWord('orange banana potatoe hackfleischbällchen rice'))
        6
  •  1
  •   Saad Mehmood    1 年前

    function LongestWord(sen) { 
        let arr = sen.split(' ');
        let longestWord;
        let counter = 0; // you need to place counter outside for loop
        for (let i = 0; i < arr.length; i++) {
            if (arr[i].length > counter) {
                counter = arr[i].length;
                longestWord = arr[i];
            }
        }
        return longestWord;
    };
    
    console.log(LongestWord('something is wrong with this'));
        7
  •  0
  •   Khalfella    1 年前

    像这样的怎么样

    # cat longest_word.js
    function longestWord(str) {
            return str.split(' ').reduce(function (acc, word) {
                    return acc.length > word.length ? acc : word;
            });
    }
    
    console.log(longestWord('the quick brown fox jumps over the lazy dog'));
    # node longest_word.js
    jumps
    #