> / </ ===三向比较,而不必多次写入比较值?

rpi*_*var 2 javascript ecmascript-6

我正在尝试写一个解决方案,该问题需要根据两个值的结果提供三个可能的不同返回值。可能性大于小于等于。一种简单易懂的书写方式是:

function compare(x, y) {
  if (x < y) return y;
  if (x > y) return x;
  if (x === y) return 'equal';
}
Run Code Online (Sandbox Code Playgroud)

我一直在试图找出是否有办法通过减少出现的次数来写这个xyif,并return在代码中。例如,如果我不检查===,则可以消除if并减少return为一种用途:

function compare(x, y) {
  return x > y ? x : y;
}
Run Code Online (Sandbox Code Playgroud)

===重新添加到此三元返回中比较笨拙,并且当存在两种以上可能性时,我不喜欢使用三元运算符。如果将其替换为长表达式xy则可能很难理解:

function compare(x, y) {
  return x === y ? 'equal' : x > y ? x : y;
}
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

function compare(x, y) {
  if (x !== y) {
    return x > y ? x : y;
  }
  return 'equal';
}
Run Code Online (Sandbox Code Playgroud)

比上面的函数可读性更高,尤其是如果xy被表达式替换。

在这种情况下使用开关可能会过大-也许不是吗?还有其他解决方案吗?是否有保存比较结果的方式xy再检查什么价值?在那个时候甚至值得麻烦吗?

Nin*_*olz 6

您只能进行一次比较,然后返回一个'equal'或最大值。

function compare(x, y) {
    return x === y
        ? 'equal'
        : Math.max(x, y);
}

console.log(compare(1, 2));
console.log(compare(2, 2));
console.log(compare(2, 1));
Run Code Online (Sandbox Code Playgroud)