如何检查一个数字是小是大还是介于两个值之间



我必须检查输入数字是更小还是更大,或者在另外两个数字之间。我做了正确的函数,但有什么方法可以让这个函数更可读、更短吗?当至少有一个输入参数不是数字时,函数应返回NaN。

function order(num, a, b) {
if (a > b) {
return NaN;
}
if (num < a) {
return -1;
}
if (num > b) {
return 1;
}
if (a <= num && num <= b) {
return 0;
}
return NaN;
}
// Use case examples
console.log(order(5, 10, 20));
console.log(order(10, 10, 20));
console.log(order(15, 10, 20));
console.log(order(20, 10, 20));
console.log(order(25, 10, 20));
console.log(order(15, 20, 10));
console.log(order(15, 10, undefined));
console.log(order(15, undefined, 20));
console.log(order(15, undefined, undefined));
console.log(order(undefined, 10, 20));

从外观上看,函数中有一个固有的假设,即a<=b.最好有一个类似断言的东西来验证这个条件。例如,请参阅JavaScript中的"assert"是什么?。

除此之外,这是一个较短代码的示例。不过,别以为它可读性更强了。一开始我以为我减少了if语句的数量,但显然不是这样。然而,我确实认为剔除非";数字";类型在开始时比结束时更重要,而且这更明确。

function order(num, a, b) {
if (typeof num != "number" || typeof a != "number" || typeof b != "number")
return NaN;
if (num >= a) {
if (num > b)
return 1;
return 0;
}
return -1;
}
// Use case examples
console.log(order(5, 10, 20));
console.log(order(10, 10, 20));
console.log(order(15, 10, 20));
console.log(order(20, 10, 20));
console.log(order(25, 10, 20));
console.log(order(15, undefined, 20));
console.log(order(15, undefined, undefined));
console.log(order(undefined, 10, 20));

最新更新