如果数组在一个0之后依次包含一个1

时间:2018-07-03 10:40:55

标签: javascript

我正在尝试测试一些数组以检查它们是否包含: 至少一个0 至少一个1 0之后至少1 1

但是我对arr.includes(0,1)的测试对于应该为false的数组返回true。他们应该是:

// var arr = [1,1,0,0,1,0,1] - should return true
// var arr2 = [1,1,0,0] - should return false

如何测试一个数组在一个0之后是否至少包含一个1?谢谢你的帮助

我的代码:

if(arr.includes(0) && arr.includes(1) && ___________) {
    console.log(true);
} else {
    console.log(false);
}

6 个答案:

答案 0 :(得分:10)

您可以join()个数组项来检查是否includes() 01

var arr1 = [1,1,0,0,1,0,1];
var arr2 = [1,1,0,0];
function checkData(arr){
  if(arr.join('').includes('01')) {
    return true;
  } else {
    return false;
  }
}
console.log(checkData(arr1)); // true
console.log(checkData(arr2)); // false

答案 1 :(得分:4)

您需要相互测试指数

const verify = arr => {
  let oneZero = false;
  let zeroOne = false;
  arr.forEach((num, i) => {
    if (num === 0 && arr[i + 1] === 1) zeroOne = true;
    else if (num === 1 && arr[i + 1] === 0) oneZero = true;
  });
  return (oneZero && zeroOne);
};
console.log(verify([1, 1, 0, 0, 1, 0, 1]));
console.log(verify([0, 0, 1, 1]));
console.log(verify([1, 1, 0, 0]));
console.log(verify([1, 1, 0, 0, 1]));

或者,也许使用for循环并在找到两个条件后立即返回:

const verify = arr => {
  let oneZero = false;
  let zeroOne = false;
  for (let i = 0; i < arr.length; i++) {
    const num = arr[i];
    if (num === 0 && arr[i + 1] === 1){
      zeroOne = true;
      if (oneZero && zeroOne) return true;
    } else if (num === 1 && arr[i + 1] === 0) {
      oneZero = true;
      if (oneZero && zeroOne) return true;
    }
  }
  return false;
};
console.log(verify([1, 1, 0, 0, 1, 0, 1]));
console.log(verify([0, 0, 1, 1]));
console.log(verify([1, 1, 0, 0]));
console.log(verify([1, 1, 0, 0, 1]));

答案 2 :(得分:2)

这似乎很简单:

var prev = null;
var oneAfterZero = false;
var one = false;
var zero = false;

for(var i = 0; i < arr.length; ++i)
{
    if (arr[i] === 1 && prev === 0)
    {
        oneAfterZero = true;
    }

    if (arr[i] === 1)
    {
        one = true;
    }

    if (arr[i] === 0)
    {
        zero = true;
    }

    prev = arr[i];
}

if (one === true && zero === true && oneAfterZero === true)
{
    alert('yay!');
}

答案 3 :(得分:1)

这是一个简单的consecutiveIncludes函数,可以满足您的要求

function consecutiveIncludes(arr,first,second){
  for (let i = 0; i<arr.length;i++){
    if(arr[i] == first && arr[i+1] == second) return true;
  }
  return false;
}
var arr1 = [1,1,0,0];
var arr2 = [1,1,0,0,1,0,1];
console.log(consecutiveIncludes(arr1,0,1)) // false
console.log(consecutiveIncludes(arr2,0,1)) // true

关键是要先检查一个索引

答案 4 :(得分:1)

只需arr.join(',').includes('0,1')

答案 5 :(得分:1)

Array.includes()需要两个参数:

arr.includes(searchElement[, fromIndex])

第二个参数(fromIndex)是可选的,其默认值为0

调用arr.includes(0, 1)时,基本上告诉Array.includes()从数组中位置0开始搜索1

如果您的数组包含数字,则达到预期结果的最简单方法是使用Array.join()生成一个字符串,以搜索该字符串中的值序列:

arr.join(',').includes('0,1')