2012-10-09 20 views
6

Ésta es la forma en que la caja para ver si un número está en un rango (entre dos otros números):código más cortas para comprobar si un número está en un rango de JavaScript

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 

tengo que hacer esto matemáticas en mi código mucho y estoy buscando un código equivalente más corto.

Esta es una versión más corta que se me ocurrió. Pero estoy seguro de que puede conseguir mucho más corto:

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

Pero inconveniente es que tenga que repetir x o y

+0

@NullUserException: ¿Eso implica que '0' está en el intervalo de' 1 - 2 '? – Bergi

+0

@Bergi Derp. OP, eso estuvo muy mal. – NullUserException

+0

su versión más corta es incorrecta http://jsfiddle.net/Fm39z/ – ajax333221

Respuesta

2

Si tuviera que hacer esto mucho, que acababa de escribir una función en lo que inRange(a, b, x) sería una llamada de función corta cada vez que lo necesitaba. De esta manera también podría hacer que el cuerpo de la función se ofusque un poco menos sin preocuparse por su longitud.

20
Number.prototype.between = function (min, max) { 
    return this > min && this < max; 
}; 

if ((5).between(4, 6)) { 
    alert('worked!'); 
} 

var num = 6; 
if (num.between(5, 7)) { 
    alert('still worked!'); 
} 

http://jsfiddle.net/jbabey/4jjRm/1/

en cuenta que necesita para rodear literales numéricos en parens, o el intérprete cree que su propiedad es un punto decimal y volar.

+1

... o duplicar el punto, si no recuerdo mal. –

+0

Obviamente, esto solo funcionará si pasa los números en el orden correcto. – NullUserException

+1

@NullUserException: puede agregar fácilmente eso con la línea 'if (max Bergi

0

Si necesita la flexibilidad para probar si un número está entre dos números sin encontrar primero el mínimo y máximo:

let inRange = (num1, num2, numTest) => { 
    [min, max] = [num1, num2].sort((a, b) => a > b); 
    return numTest > min && numTest < max; 
} 

Prueba de baja a alta:

inRange(1, 5, 3); // true 
inRange(1, 5, 6); // false 

Prueba de alta a bajo:

inRange(5, 1, 3); // true 
inRange(5, 1, 6); // false 
0

He editado el código de arriba, porque no hace bien la clasificación. Esto es lo que me funcionó perfectamente (incluye termina la gama):

var isNumberInRange = (num1, num2, testNum) => { 
    var min, max; 
    [min, max] = [num1, num2].sort((a, b) => a - b); 
    return (testNum >= min && testNum <= max); 
}; 
Cuestiones relacionadas