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
6 Answers
Reset to default 10You 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')
;