for循环在移动javascript之前迭代同一项目3次

moo*_*law 0 javascript arrays for-loop function

我创建了一个返回字符串最长字的函数.为了实现这一点,字符串已被拆分为一个数组并使用a进行迭代for loop.

出于某种原因,for循环在增加计数之前在同一项上迭代3次?我没有看到明显的错误.

这里发生了什么,我该如何阻止它?还有更好的方法来实现我在这里尝试做的事情吗?我对javascript比较陌生.

function longWord(str) {
var wordArr = str.split(' ');
var highest = 0;
var longestWd ;

for(var i = 0; i < wordArr.length; i++) {
    var temp = wordArr[i].length
   var word = wordArr[i];

    if(temp > highest) {
        highest = temp;
        longestWd = word;             
    }
        alert(longestWd);
        alert(highest);
}

}

longWord('this is a string with a longest word');
Run Code Online (Sandbox Code Playgroud)

CD.*_*D.. 5

你的代码很好.如果您将警报替换为如下console.log调用:

console.log(i, word, longestWd)
Run Code Online (Sandbox Code Playgroud)

你可以看到它按预期工作:

0 "this" "this"
1 "is" "this" 
2 "a" "this" 
3 "string" "string"
4 "with" "string" 
5 "a" "string" 
6 "longest" "longest"
7 "word" "longest" 
Run Code Online (Sandbox Code Playgroud)

一个很好的方法可以通过这样使用reduce:

function longWord(str){
    return str.split(' ').reduce(function(a, b){
       return a.length > b.length ? a : b;
    });
}
Run Code Online (Sandbox Code Playgroud)

reduce()方法对累加器应用函数,并且数组的每个值(从左到右)必须将其减少为单个值.