2012-10-09 8 views
6

Dies ist, wie ich zu sehen, Kasse, wenn eine Zahl in einem Bereich (zwischen zwei anderen Zahlen):Shortest-Code zu überprüfen, ob eine Zahl in einem Bereich in JavaScript ist

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 

Ich habe, dies zu tun Mathe in meinem Code viel und ich bin auf der Suche nach kürzeren gleichwertigen Code.

Dies ist eine kürzere Version, die ich mir ausgedacht habe. Aber ich bin sicher, dass es bekommen kann viel kürzer:

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

aber Nachteil ist, ich x oder y

+0

@NullUserException: Hat das bedeuten, dass '0' im Intervall '1 - 2'? – Bergi

+0

@Bergi Derp. OP, das war sehr falsch. – NullUserException

+0

Ihre kürzere Version ist falsch http://jsfiddle.net/Fm39z/ – ajax333221

Antwort

2

wiederholen Wenn ich diese viel zu tun hätte, würde ich schreiben Sie einfach eine Funktion inRange(a, b, x) so dass es wäre ein kurzer Funktionsanruf, wenn ich es brauchte. Auf diese Weise können Sie den Funktionskörper auch etwas weniger verschleiert machen, ohne sich Gedanken über seine Länge machen zu müssen.

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/

Beachten Sie, dass Sie benötigen Zahlenliterale in Pars umgeben, oder der Dolmetscher werden denken, Ihre Immobilie ein Komma ist und die Luft sprengen.

+1

... oder verdoppeln Sie den Punkt, wenn ich mich richtig erinnere. –

+0

Offensichtlich funktioniert das nur, wenn Sie die Nummern in der richtigen Reihenfolge übergeben. – NullUserException

+1

@NullUserException: Das kann man einfach hinzufügen mit der Zeile 'if (max Bergi

0

Wenn Sie die Flexibilität zu testen, ob eine Zahl zwischen zwei Zahlen fällt, ohne zuerst das Minimum zu finden und maximal:

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

Testing von niedrig bis hoch:

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

Testen von hoch zu niedrig:

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

Ich habe den Code von oben bearbeitet, weil es die Sortierung nicht gut macht. Dies ist, was für mich funktioniert perfekt (umfasst das Angebot endet):

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