重构 A && B && B > A

Refactoring A && B && B > A

有重构这个逻辑表达式的方法吗?

A && B && B > A

刚刚学习,想知道同样的表达式的另一种写法 谢谢

更新:

好的,以下解决方案并不适用于所有情况。

如果您希望 AB 被解释为 true,我认为您不需要重构表达式逻辑。在逻辑表达式的处理过程中,引擎会独立优化它们并执行lazy way,例如:如果表达式A && (B || C)中的值A被解释为 false,则表达式的处理将立即结束并返回值 Afalse 或等效值),但如果 A 被解释为 true,则条件的处理将继续。此外,如果 B 被解释为 true,则由于 逻辑加法 (OR),处理将以等于 true 的值结束,如果 B 被解释为 false,则处理将继续...


试试这个 - 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; }

拆分表达式并将它们放入具有可读名称的变量中。

由于缺少有关 A 和 B 是什么的信息,我假设表达式的前半部分确保两个值都为真,然后您比较它们:

const bothTruthy= A && B;
const BLargerThanA = B > A;

const yourExpression = bothTruthy && BLargerThanA;