если значение находится между двумя числами - PullRequest
11 голосов
/ 10 декабря 2010

Я хочу иметь возможность проверить, находится ли значение в пределах диапазона номеров.Это мой код jQuery ...

if ((year < 2099) && (year > 1990)){
    return 'good stuff';
}

Есть ли более простой способ сделать это в jQuery?Например, есть ли что-то вроде этого ...

if (1990 < year < 2099){
    return 'good stuff';
}

Ответы [ 6 ]

21 голосов
/ 10 декабря 2010

Во многих языках второй путь будет оцениваться слева направо неправильно относительно того, что вы хотите.

В C, например, 1990 < year будет оцениваться в 0 или 1, который затем становится1 < 2099, что, конечно, всегда верно.

Javascript очень похож на C: 1990 < year возвращает true или false, и эти логические выражения, кажется, численно сравниваются равными 0 и1 соответственно.

Но в C # он даже не скомпилируется, что выдает ошибку:

ошибка CS0019: Оператор '<' нельзя применить к операндам типа 'bool'and' int '</p>

Вы получаете похожую ошибку от Ruby, в то время как Haskell говорит, что вы не можете использовать < дважды в одном и том же выражении инфикса.

Вверхумоя голова, Python - единственный язык, который, я уверен, обрабатывает настройку «между» таким образом:

>>> year = 5
>>> 1990 < year < 2099
False
>>> year = 2000
>>> 1990 < year < 2099
True

Суть в том, что первый способ (x < y && y < z) всегда самая безопасная ваша ставка.

9 голосов
/ 17 сентября 2011

Вы можете сделать свой собственный метод:

// jquery
$(function() {
    var myNumber = 100;
    try {
        if (myNumber.isBetween(50, 150)) 
            alert(myNumber + " is between 50 and 100.");
        else 
            alert(myNumber + " is not between 50 and 100.");
    } catch (e) {
        alert(e.message());
    }

});

// js prototype
if (typeof(Number.prototype.isBetween) === "undefined") {
    Number.prototype.isBetween = function(min, max, notBoundaries) {
        var between = false;
        if (notBoundaries) {
            if ((this < max) && (this > min)) between = true;
            alert('notBoundaries');
        } else {
            if ((this <= max) && (this >= min)) between = true;
            alert('Boundaries');
        }
        alert('here');
        return between;
    }
}

надеюсь, это поможет.

Макс

2 голосов
/ 23 апреля 2018

Быстрый и простой способ сделать это - создать такую ​​функцию:

function inRange(n, nStart, nEnd)
{
    if(n>=nStart && n<=nEnd) return true;
    else return false;
}

Затем используйте это следующим образом:

inRange(500, 200, 1000) => this return true;

Или вот так:

inRange(199, 200, 1000) => this return false;
0 голосов
/ 03 февраля 2012

Из аналогичного решения здесь: http://indisnip.wordpress.com/2010/08/26/quicktip-check-if-a-number-is-between-two-numbers/

$.fn.between = function(a,b){
    return (a < b ? this[0] >= a && this[0] <= b : this[0] >= b && this[0] <= a);
}
0 голосов
/ 10 декабря 2010

Если вам не нравится логический оператор, вы всегда можете использовать вложенные операторы if:

if (1990 < year)
{
    if( year < 2099)
        return 'good stuff';
}
0 голосов
/ 10 декабря 2010

Если вы спрашиваете, на каком языке есть эта функция, python:

 if (1990 < year < 2099):
     return 'good stuff'
...