在数组中查找最大数量的连续值(JS)

时间:2017-06-06 22:25:15

标签: javascript arrays

我正在努力解决一个我似乎无法解决的问题,希望能从一个比我更有经验的人那里获得一些洞察力。基本上,我有一个数组,有10到500个值。这些值都是true或false,但它们是随机顺序。我需要知道连续出现错误的最多次数。例如:

[false, false, true, false, true, false, true, false, false, false]

应该返回3,因为它最多连续出现3次。这似乎是一个潜在的常见问题需要解决,但我无法通过搜索找到解决方案。任何帮助将不胜感激!

5 个答案:

答案 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);

步骤说明:

  1. 将数组转换为字符串
  2. 将新字符串拆分为我们 不想想要为字符串形式的每个连续项创建一个数组。
  3. 然后缩小该数组并在reduce中 函数,通过正则表达式匹配来计算匹配数量-并找到 这些匹配项的最大数量。

要点-实际上仅适用于二进制列表[true, false][1,0]

Fiddle