我有一个嵌套的if语句树,该树运行一个函数16次(我知道),每次向该函数发送一组不同的元素。
该函数仅返回true或false。
if(!checkSpecial(1,1,1,1)) {
if(!checkSpecial(1,1,1,0)) {
if(!checkSpecial(1,1,0,1)) {
if(!checkSpecial(1,0,1,1)) {
if(!checkSpecial(0,1,1,1)) {
if(!checkSpecial(1,1,0,0)) {
if(!checkSpecial(1,0,0,1)) {
if(!checkSpecial(0,0,1,1)) {
if(!checkSpecial(1,0,1,0)) {
if(!checkSpecial(0,1,0,1)) {
if(!checkSpecial(0,1,1,0)) {
if(!checkSpecial(1,0,0,0)) {
if(!checkSpecial(0,1,0,0)) {
if(!checkSpecial(0,0,1,0)) {
if(!checkSpecial(0,0,0,1)) {
if(!checkSpecial(0,0,0,0)) {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} else {
// do other stuff
}
如您所见,如果函数在这些实例的每个实例中返回false,我想做其他事情。
如果函数返回true,我什么也不想做。
我的问题是,我知道必须有一种更好的方法来执行此操作,我假设是通过某种循环进行的,但是我不知道这种循环的类型或工作方式。
到目前为止,我的解决方法是:
for (var i = 0; i < 16; i++) {
// HELP!
}
任何指针将不胜感激。谢谢。
最佳答案
您可以创建一个数字为0-15的二进制表示形式的数组,然后在调用以数组项作为参数的函数时检查其中的every
是否返回false:
const combinations = Array.from(
{ length: 16 },
(_, i) => (i >>> 0).toString(2).padStart(4, '0').split('').map(Number)
);
console.log(combinations)
/*
if (combinations.every(combination => checkSpecial(...combination) === false)) {
// every result was false
} else {
// at least one result wasn't false
}
*/
关于javascript - 如何简化嵌套的if语句树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55506031/