我正在尝试测试一些数组以检查它们是否包含: 至少一个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);
}
答案 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')