我正在努力解决一个我似乎无法解决的问题,希望能从一个比我更有经验的人那里获得一些洞察力。基本上,我有一个数组,有10到500个值。这些值都是true或false,但它们是随机顺序。我需要知道连续出现错误的最多次数。例如:
[false, false, true, false, true, false, true, false, false, false]
应该返回3,因为它最多连续出现3次。这似乎是一个潜在的常见问题需要解决,但我无法通过搜索找到解决方案。任何帮助将不胜感激!
答案 0 :(得分:4)
您可以使用一个值来保持连续假值的计数,如果该值大于当前最大值,则将最大值设置为该值。如果值为true
,则将计数器重置为0
。
var arr = [false, false, true, false, true, false, true, false, false, false]
var c = 0, max = 0;
arr.forEach(function(e) {
e == false ? c++ : c = 0;
if (c > max) max = c;
})
console.log(max)

答案 1 :(得分:1)
您可以简单地使用forEach
函数,然后使用内部计数器,例如:
console.log( countConsecutive([false, false, true, false, true, false, true, false, false, false]) );
function countConsecutive( arr )
{
var c = 0;
arr.forEach(function(e) {
(e == false) ? c++ : c = 0;
});
return c;
}

答案 2 :(得分:1)
尝试使用此函数计算数组中连续false
的数量:
function countNumFalse(arr){
var max = 0;
var condFalse = false;
var numFalse = 0;
for (var i = 0; i < arr.length; i++) {
condFalse = condFalse || arr[i];
if(condFalse === true){
condFalse = false;
numFalse = 0;
}
else{
numFalse++;
if(numFalse > max){
max = numFalse;
}
}
}
return max;
}
var arr1 = [false, false, true, false, true, false, true, false, false, false];
countNumFalse(arr1);
3
答案 3 :(得分:0)
var yourArray=[false,true,true,false,false,false,true];
arrayLength = yourArray.length;
var maxCount=0;
var currentCount=0;
var lastElement;
for(var i = 0;i<arrayLength;i++){
if(lastElement === yourArray[i]){
currentCount++;
}
else{
if(currentCount>maxCount){
maxCount=currentCount;
}
currentCount=1;
}
lastElement=yourArray[i];
}
console.log(maxCount);
这应该符合您的需求
答案 4 :(得分:0)
这是一个时髦但只有一行的解决方案:
var arr = [false, false, false, true, false, false, true, false, false, true];
var consec = arr.join('').split('true').reduce((i, x) => Math.max((x.match(/false/g) || []).length, i), 0);
步骤说明:
要点-实际上仅适用于二进制列表[true, false]
,[1,0]
等