Vous devez
-
Commencez par logicalAnd
fixé à true
-
Utilice logicalAnd
lors de sa mise à jour, plutôt que d'utiliser deux entrées de arguments
Le changement minimal est le suivant :
function andMultipleExpr(){
let logicalAnd = true; // ***
let i;
for (i = 0; i < arguments.length; i++){
logicalAnd = logicalAnd && arguments[i]; // ***
}
return logicalAnd;
}
console.log(andMultipleExpr(true, true, false, false));
Mais La solution de mbojko a l'avantage de court-circuiter (arrêter la boucle dès qu'elle trouve une valeur erronée), ce qui semble être une bonne idée.
Puisque vous utilisez ES2015+, vous devriez probablement utiliser un paramètre rest plutôt que arguments
et vous pouvez utiliser un for-of
boucle :
function andMultipleExpr(...flags) {
let logicalAnd = true;
for (const flag of flags) {
logicalAnd = logicalAnd && flag;
}
return logicalAnd;
}
console.log(andMultipleExpr(true, true, false, false));
Vous pouvez également le court-circuiter en suivant les instructions suivantes L'approche de mbojko
function andMultipleExpr(...flags) {
for (const flag of flags) {
if (!flag) {
return false;
}
}
return true;
}
console.log(andMultipleExpr(true, true, false, false));
Certaines personnes pourraient jeter reduce
à cela, mais Archie's every
solution est bien meilleure. (Mais comme votre comparaison n'est pas stricte, je me contenterais de la faire .every(flag => flag)
.)