Shortest code to check if a number is in a range in JavaScript

5

6

This is how I checkout to see if a number is in a range (in between two other numbers):

var a = 10,
    b = 30,
    x = 15,
    y = 35;

x < Math.max(a,b) && x > Math.min(a,b) // -> true
y < Math.max(a,b) && y > Math.min(a,b) // -> false

I have to do this math in my code a lot and I'm looking for shorter equivalent code.

This is a shorter version I came up with. But I am sure it can get much shorter:

a < x && x < b
true
a < y && y < b
false

But downside is I have to repeat x or y

Mohsen

Posted 2012-10-09T22:45:14.167

Reputation: 677

5a<x&x<b will return 1 or 0, and is 7 characters shorter. – beary605 – 2012-10-10T01:16:43.223

2

For code-golf purposes beary605's solution is best, but if you're using the code a lot you'd be better off declaring a function like within(a,b) or inrange(a,b) somewhere in your code and using that. It's instantly obvious what it does and therefore easier to maintain in the future.

– Gareth – 2012-10-10T11:19:10.597

beary605, your solution won't work because it will always return 0 when b<a even if x is in between a and b (for example when a=20; b=10; x=15) – Yellos – 2012-10-19T22:23:28.257

@Yellos a is supposed to be the minimum while b is max. Your example shows the minimum higher than the maximum! – bryc – 2016-12-30T22:52:06.763

Answers

13

13 chars, checks both variants a<b and b<a

(x-a)*(x-b)<0

In C may be used expression (may be also in JavaScript). 11 chars, No multiplications (fast)

(x-a^x-b)<0

AMK

Posted 2012-10-09T22:45:14.167

Reputation: 506

9

a<x==x<b

JavaScript, 8 chars.

Yellos

Posted 2012-10-09T22:45:14.167

Reputation: 191

10<0==0<1 -> false – Mohsen – 2012-10-20T00:28:58.820

I like Yellos answer. And 0>=0==0<1 returns true – tim – 2013-07-10T23:43:35.777

1@Mohsen the OP's request was a number in between two limiting numbers, not including them. Therefore, 0<0==0<1 should return false, because in that case, 0 is the lower limit, but also the number that should be in between the range. And they are equal. – gilad mayani – 2017-04-10T14:16:17.770

1

JavaScript, 7 bytes

a<n&n<b

Himanshu Chaudhary

Posted 2012-10-09T22:45:14.167

Reputation: 111

Golfed: a<n<b – None – 2019-12-12T12:49:16.740

3@A̲̲ That doesn't work in Javascript – Jo King – 2019-12-12T12:52:07.947