¿Hay alguna manera de refactorizar esta expresión lógica?
A && B && B > AEstoy aprendiendo y me gustaría saber otra forma de escribir la misma expresión Gracias
Divida las expresiones y colóquelas en variables con nombres legibles.
Debido a la falta de información sobre lo que son A y B, asumo que la primera mitad de la expresión se asegura de que ambos valores sean verdaderos y luego los comparas:
const bothTruthy= A && B; const BLargerThanA = B > A; const yourExpression = bothTruthy && BLargerThanA;Actualizar:
De acuerdo, la siguiente solución no funciona para todos los casos.
Creo que no necesita refactorizar su lógica de expresión si desea que A y B se interpreten como verdaderos. Durante el procesamiento de expresiones lógicas, el motor las optimiza de forma independiente y actúa de forma perezosa , por ejemplo: si en la expresión A && (B || C) el valor A se interpreta como false , entonces el procesamiento de la expresión finalizará de inmediato. y se devolverá el valor A ( false o un valor equivalente), pero si el valor de A se interpreta como true , el procesamiento de la condición continuará. Además, si B se interpreta como true , entonces debido a la adición lógica (OR) , el procesamiento terminará con un valor equivalente a true , y si B se interpreta como false , entonces el procesamiento continuará...
Prueba esto - A && (B > A)
const cases = [ [true, false], [false, true], [false, false], [true, true], [1, 2], [2, 1], [1, 0], [0, 1], [undefined, 1], [1, undefined], [undefined, 0], [0, undefined], [null, undefined], [undefined, null], [1, NaN], [NaN, 1], [0, NaN], [NaN, 0], [{}, 0], [1, {}], [{}, []], [[], {}], ['2', 1], [1, '2'], [true, 1], [1, true], [true, '1'], ['1', true], [0, -1], [-1, 0], [1, -1], [-1, 1], [false, -1], [-1, false] ]; const fails = []; cases.forEach((c) => { const [A, B] = c; const r1 = A && B && (B > A); const r2 = A && (B > A); // <-- simplified condition const r = !!r1 === !!r2; if (!r) fails.push({c: c, r1, r2}); }); if (fails.length > 0) { console.log('Not all cases passed!'); console.log(fails); } else { console.log('All cases passed!'); } .as-console-wrapper { min-height: 100%!important; top: 0; }