Javascript:检查多个数组值是否相同(顺序重要)

时间:2016-10-20 23:18:00

标签: javascript arrays

如果我有两个数组,请说

[0, 0, 1, 1, 1, 0]
[0, 1, 0, 1, 0, 1]

我想检查数字1是否按顺序出现三次,以便第一个数组返回true,第二个数组返回false。

我不确定如何做到这一点(因为订单很重要)。

5 个答案:

答案 0 :(得分:1)

您可以使用计数器查看1的值是否是连续的。

function containsSequence(arr, val, max) {
      var count = 0;

      for (var i = 0; i < arr.length; i++) {
        if (arr[i] === val) {
          counter++; // increment the counter by 1
        }
        else {
          counter = 0; // reset counter
        }
    
        // our counter met our maximum
        if (counter >= max) {
          return true;
        }
      }

      // if we get this far, there was no sequence
      return false;
    }
    
    console.log(containsSequence([0,0,1,1,1,0], 1, 3)); // true
    console.log(containsSequence([0,1,0,1,0,1], 1, 3)); // false

答案 1 :(得分:0)

  • 遍历数组,
  • 每次从数组中取三个元素 - 如果可能 - 从元素i
  • 开始
  • 检查这三个元素是否等于一个

&#13;
&#13;
function check(arr){
    for(var i=0;i<arr.length;i++)
        if(arr[i] && arr[i+1] && arr[i+2])
            if(arr[i] == arr[i+1] == arr[i+2] == 1)
                return true;
    return false;
}
console.log(check([0, 0, 1, 1, 1, 0]));
console.log(check([0, 1, 0, 1, 0, 1]));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

使用Array.prototype.some的解决方案 - 跟踪计数和索引以测试连续数字的数组:

&#13;
&#13;
var test1 = [0, 0, 1, 1, 1, 0];
var test2 = [0, 1, 0, 1, 0, 1];

function test(arr, num, max) {
  return arr.some(function(element, index) {
    if(element == num) {
       this.prevIndex = (this.prevIndex + 1) || index;
       this.count = this.count || 0;
       if(this.prevIndex == index) 
         this.count++;
       else
         this.count = 1;
       if(this.count == max) return true;
    }
  }, Object.create(null));
}

console.log(test(test1, 1, 3));
console.log(test(test2, 1, 3));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以使用counter检查所需的值val是否按limit次重复执行:

&#13;
&#13;
function checkLimit(arr, val, limit) {
  var counter = 0;
  for (var i = 0, l = arr.length; i < l; i++) {
    counter = (arr[i] === val) ? ++counter : 0;
    if (counter === limit) {
      return true;
    }
  }
  return false;
}
console.log(checkLimit([0, 0, 1, 1, 1, 0], 1, 3)); // true
console.log(checkLimit([0, 0, 1, 1, 0, 0], 1, 3)); // false
&#13;
&#13;
&#13;

答案 4 :(得分:-2)

检查此代码段

var arr1=[0,0,1,1,1,0]
var arr2=[0,1,0,1,0,1]

console.log(checkThreeOnes(arr1));

console.log(checkThreeOnes(arr2));
function checkThreeOnes(numbers){
  var i=0;
  var j=numbers.length;
  var oneCount=1;
  for(var i=0;i<j;){

       if(numbers[i]==numbers[i+1]){
           oneCount++;
           if(oneCount==3)
            return true;
       }
    else
      oneCount=1;
      i++;

  }
  return false;
}

希望这有帮助