实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
What is the best practice for implementing a comparison method who's comparison type is chosen at runtime?
假设您得到A,并希望将其与B进行比较。有时您可以检查A<B,有时您需要检查AB。您希望在一个方法中实现这一点,该方法将某种形式的"比较类型"作为其参数之一。对于如何做到这一点,是否有"最佳实践"?
为了清楚起见,我现在提供了一个如何做到这一点的例子。当传入a标志时,比较方法为"大于",反之亦然。
function func(a, b, c) {
var cmp = a ? gt : lt;
if (cmp(b, c)) {
return 'Hi';
}
return 'Bye';
}
function lt(a, b) {
return a < b;
}
function gt(a, b) {
return a > b;
}
当您需要在升序和降序之间进行选择时,我通常会在处理排序时这样做:
var cmp = a ? 1 : -1
if(b*cmp > c*cmp){ // not sure if you want a > or a < here
return 'Hi'
}else{
return 'Bye'
}
一个简短的版本是使用带xor的布尔逻辑:(注意,对于b==c的情况,它给出了错误的结果)
function func(a, b, c) {
if ((b > c)^!a) {
return 'Hi';
}
return 'Bye';
}
说明:若你们制作了一张有4种可能性的表格,你们就得到了:
a|b>c|预期输出
true|true|Hi-
true|false|再见
false | true |再见
false|false|Hi-
如果你认为Hi为真,Bye为假,如果a和b>c相等,你想要一个真,如果不相等,你就想要一个假。Xor做了类似的事情,如果2相等,则给出false,如果它们不同,则给出true。反过来,我们得到了我们想要的结果
若你们制作了相同的表格,但考虑到了相同的情况,你们可能会得到这样的结果:
function func(a, b, c) {
if(b == c || (b > c)^a){
return 'Bye'
}
return 'Hi'
}
这个怎么样?
if((a && b > c) || (!a && b < c)) {
return 'Hi';
} else {
return 'Bye';
}
我认为这仍然易于阅读和理解,涵盖了所描述的需求,并使代码简洁无重复。
相关文章:
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 比较和分配数据类型的困难
- 比较$watch函数内的基元类型时出错
- 将当前日期和时间与DateTime类型的输入进行比较
- 比较对象类型时是否需要第三个=
- 执行“JSON 类型”比较
- 如何在提交之前比较两个日期时间类型的输入
- 谷歌比较图表使用JSON数据表返回[给定轴上的所有系列必须具有相同的数据类型]
- 如何使用 jQuery 比较两个文本输入类型框值
- 比较不同类型的 JavaScript 值(不是字符串)
- ASM.js 类型错误:比较的参数必须同时是有符号、无符号或双精度
- 短手(类型不同)是字符串的正确/错误比较的好方法
- 未捕获的类型错误:无法使用'在'操作员搜索'7'当我试着比较日期的时候
- 将字符串(格式为上午10:30)转换为要在javascript中进行比较的类型
- 比较Javascript中的类型
- 在运行时检查是否有正确的日期类型,以便进行比较
- 不能比较条件语句中int类型的变量
- Javascript空类型不能比较
- 使用==比较整数和字符串时,JavaScript中的隐式数据类型转换
- 当用于ajax调用webservice的数据类型为json "时,如何将成功函数的结果与字符串进行比较