在数组中查找最长出现的相同数字

mot*_*533 5 javascript arrays

使用JavaScript,我试图找到一种方法来找到数组中相同数字(在本例中为1)的最长出现次数.

例如,这是一个示例数组: [2,5,3,1,1,1,3,7,9,6,4,1,1,1,1,1,4,7,2,3,1,1,4,3]

我想编写一个返回"5"的函数,因为数字1连续出现5次.(它也连续发生3次和2次,但我发生的时间最长).

到目前为止,我写道:

function streak(arr) {
    var i,
        temp,
        streak,
        length = arr.length;

    for(i=0; i<length; i++) {
        if (arr[i] === 1) {
            streak += 1;
        } else {
            temp = streak;
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道如果我发现一个事件,我需要某种方式知道我离开的地方,但我感觉有些卡住了.

有什么指针吗?

Rob*_*ill 6

我稍微修改了你的功能.您需要将最高条纹存储为当前条纹的单独变量,并在循环中必要时覆盖 - 最后在函数末尾返回该变量.

function streak(arr) {
    var i,
        temp,
        streak,
        length = arr.length,
        highestStreak = 0;

    for(i = 0; i < length; i++) {
        // check the value of the current entry against the last
        if(temp != '' && temp == arr[i]) {
            // it's a match
            streak++;
        } else {
            // it's not a match, start streak from 1
            streak = 1;
        }

        // set current letter for next time
        temp = arr[i];

        // set the master streak var
        if(streak > highestStreak) {
            highestStreak = streak;
        }
    }

    return highestStreak;
}

var array = [2,5,3,1,1,1,3,7,9,6,4,1,1,1,1,1,4,7,2,3,1,1,4,3];

console.log(streak(array)); // 5
Run Code Online (Sandbox Code Playgroud)

如果你还想跟踪最高条纹的值,在函数的开头定义另一个变量,保存最高条纹时保存它的值,并将其作为数组返回:

    // set the master streak var
    if(streak > highestStreak) {
        highestStreakValue = temp;
        highestStreak = streak;
    }
}

return [highestStreak, highestStreakValue];


var array = [2,5,3,1,1,1,3,7,9,6,4,'a','a','a','a','a',4,7,2,3,1,1,4,3];
console.log(streak(array)); // [5, "a"]
Run Code Online (Sandbox Code Playgroud)

演示返回两者