最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - If array contains one 1 after one 0 in order - Stack Overflow

programmeradmin1浏览0评论

I'm trying to test some arrays to check if they contain: at least one 0 at least one 1 at least one 1 after one 0

But my test of arr.includes(0,1) returns true for an array that should be false. They should be:

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

How can I test whether an array contains at least one 1 after one 0? thanks for any help

My code:

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

I'm trying to test some arrays to check if they contain: at least one 0 at least one 1 at least one 1 after one 0

But my test of arr.includes(0,1) returns true for an array that should be false. They should be:

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

How can I test whether an array contains at least one 1 after one 0? thanks for any help

My code:

if(arr.includes(0) && arr.includes(1) && ___________) {
    console.log(true);
} else {
    console.log(false);
}
Share Improve this question asked Jul 3, 2018 at 10:40 user8758206user8758206 2,1917 gold badges27 silver badges75 bronze badges 1
  • 1 arr.includes(0) && arr.includes(1) && arr.lastIndexOf(1) > arr.indexOf(0) – Jaydip Jadhav Commented Jul 3, 2018 at 10:45
Add a ment  | 

6 Answers 6

Reset to default 10

You can join() the array items to check whether that includes() 01 or not:

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

You need to test the indicies against each other.

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]));

Or, perhaps use a for loop and return as soon as both conditions are found:

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]));

This seems pretty simple:

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!');
}

Here's a simple consecutiveIncludes function that does what you asked

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

Key here is to check one index after another

Array.includes() expects two arguments:

arr.includes(searchElement[, fromIndex])

The second argument (fromIndex) is optional, its default value being 0.

When you call arr.includes(0, 1) you basically tell Array.includes() to start searching for 0 from position 1 in the arrays.

If your array contains numbers, the easiest way to achieve the desired oute is to use Array.join() to produce a string an search for the sequence of values in this string:

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

Just do arr.join(',').includes('0,1');

发布评论

评论列表(0)

  1. 暂无评论