简单的逻辑算法

时间:2021-02-19 16:11:35

标签: javascript algorithm

我正在做一些算法挑战。我正在取一个数字,将其转换为字符串,然后转换为数组,并逐一检查其每个元素。下面的代码适用于 javascript。目标是,如果所有数字都是 if 语句中的数字,则该函数应返回 true。但如果有 7 或任何其他值,则该函数将返回 false。

var a = myFunction(3);

if(a === true){
    alert("true");
}
else{
    alert("false");
}
function myFunction(number){
    let array = number.toString().split("");
    
    for(var i = 0; i<array.length; i++){
        if(array[i] !== '0' && array[i] !== '1' && array[i] !== '8' && array[i] !== '5' && array[i] !== '2'){
            return false;
        }
    }
    return true;
}

我被下面的逻辑困住了。

if(array[i] !== '0' && array[i] !== '1' && array[i] !== '8' && array[i] !== '5' && array[i] !== '2')

为什么我把'&&'改成'||'就不能正常工作?我很困惑,如果 array[i] = 1,那么它应该是假的,因为 array[i] !== 0 或 8 或 if 语句中的其他数字。

2 个答案:

答案 0 :(得分:2)

logical OR ||De Morgan's laws 结合使用:

!(a && b) = !a || !b 
!(a || b) = !a && !b

function check(number) {
    let array = number.toString().split("");
    for (var i = 0; i < array.length; i++) {
      if (!(array[i] === '0' || array[i] === '1' || array[i] === '8' || array[i] === '5' || array[i] === '2')) {
        return false;
      }
    }
    return true;
}

console.log(check(18520));
console.log(check(7));

答案 1 :(得分:0)

const inclusive = set => test => (test + '')
    .split('')
    .filter(value => set.includes(parseInt(value, 10)))
    .length > 0

let test = inclusive([0,1,2,5,8])

console.log('3: ' + test(3))
console.log('321: ' + test(321))
console.log('830: ' + test(830))