javascript - > / < / === 三路比较而不必多次写入比较值?
问题描述
我正在尝试为需要三个可能的不同返回值的问题编写解决方案,具体取决于两个值的结果。可能性大于、小于或等于。一个简单易懂的写法是:
function compare(x, y) {
if (x < y) return y;
if (x > y) return x;
if (x === y) return 'equal';
}
我一直试图弄清楚是否有办法通过减少代码中 , , 和 的出现次数x
来y
编写if
这个return
。例如,如果我不检查===
,那么我可以消除if
并减少return
到一种用途:
function compare(x, y) {
return x > y ? x : y;
}
添加===
回这个三元返回比较笨拙,当有两种以上的可能性时,我不喜欢使用三元运算符。x
如果并且y
被长表达式替换,这可能真的很难阅读:
function compare(x, y) {
return x === y ? 'equal' : x > y ? x : y;
}
我也可以这样做:
function compare(x, y) {
if (x !== y) {
return x > y ? x : y;
}
return 'equal';
}
这可能比上面的函数更具可读性,尤其是如果x
和y
被替换为表达式。
在这种情况下使用开关可能是矫枉过正——但也许不是?有其他解决方案吗?有没有办法存储比较结果,x
然后y
检查该值是什么?到那时还值得麻烦吗?
解决方案
您可以只进行一次比较并返回其中一个'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));
推荐阅读
- ansible - ansible:自定义要使用的密码管理器
- python-3.x - 数据类 + sqlalchemy(使用 mapper_registry.mapped)无法实例化对象
- json - 如何通过`jq`在一行中打印多个值?
- c - CS50 过滤器:边缘我的代码工作正常,但无法通过 cs50 检查
- r - R 无法连接到 SQLite
- react-native - 使用 expo 安装带有 NPM 的包失败
- browser - 如何在 Allure 框架中禁用缓存?
- c# - 单元测试中的模拟混淆
- javascript - 在主页中调整大小的缩略图
- azure - 具有多个 Azure 订阅的 Confluent Cloud Private Connectivity (Azure)