我正在做一些算法挑战。我正在取一个数字,将其转换为字符串,然后转换为数组,并逐一检查其每个元素。下面的代码适用于 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 语句中的其他数字。
答案 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))