我有一个嵌套的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/

10-10 18:21