2010-12-10 66 views
10

Je souhaite pouvoir tester si une valeur est comprise dans une plage de nombres. C'est mon code jQuery ...si la valeur est comprise entre deux nombres

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

Existe-t-il une manière plus simple de faire cela dans jQuery? Par exemple, est-il quelque chose comme ça ...

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

Répondre

19

Dans de nombreuses langues, sera évaluée la deuxième façon de gauche à tort à propos de ce que vous voulez.

En C, par exemple, 1990 < year va évaluer à 0 ou 1, qui devient alors 1 < 2099, ce qui est toujours vrai, bien sûr.

Javascript est tout à fait similaire à C: 1990 < year retours true ou false, et ces expressions booléennes semblent comparer numériquement égale à 0 et 1 respectivement.

Mais en C#, il ne sera même pas compiler, vous donnant l'erreur:

error CS0019: Operator '<' cannot be applied to operands of type 'bool' and 'int'

Vous obtenez une erreur similaire de Ruby, alors que Haskell vous dit que vous ne pouvez pas utiliser < deux fois dans la même expression infixe .

Du haut de ma tête, Python est la seule langue que je suis sûr que gère le « entre » la configuration de cette façon:

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

L'essentiel est que la première façon (x < y && y < z) est toujours la plus sûre pari.

+0

OK, je signifie en javascript, désolé. Je suppose que les deux déclarations avec && est le seul moyen? – Inigo

+0

Bon, c'est réglé! merci – Inigo

0

Si vous demandez quelle langue a cette fonctionnalité, python fait:

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

Si vous ne souhaitez pas l'opérateur booléen, vous pouvez toujours utiliser des déclarations imbriquées si:

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

Vous pouvez faire votre propre méthode:

// 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; 
    } 
} 

espérons que cette aide.

Max

+0

très joli code. Merci. –

0

A partir d'une solution similaire ici: 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

-1. Vous avez ajouté ceci au prototype d'objets jQuery, quand il est destiné à être ajouté au prototype de 'Number', comme expliqué dans le lien que vous avez fourni. Non seulement cela ne se rapporte pas à la question du PO, mais c'est une chose absurde à faire. –

+0

Pourquoi cela ne concerne-t-il pas? L'OP a demandé une solution jquery, le lien décrit une solution js native. Tout dans jquery est un objet, d'où le prototype d'objet. Pourquoi est-ce absurde? D'accord, il faut que la valeur de l'objet soit référencée, plutôt que l'objet lui-même (que j'ai corrigé) mais je pense à peine que cela rend absurde ... exemple de travail: http://jsfiddle.net/xq4NE/ –

+0

Hmm .Après vos modifications, je reconnais que ce n'est plus un non-sens. Ce n'est toujours pas quelque chose que je ferais bien; il n'y a pas de raison pour que la solution jQuery soit meilleure que celle que vous utilisiez, et pour autant que je sache, appeler jQuery sur des nombres (vous devez faire quelque chose comme $ (4) .between (3,5) 'isn Quelque chose que font les gens (assez raisonnablement, puisque la plupart des méthodes d'un objet jQuery sont spécifiques aux éléments DOM), vous rompez inutilement avec les patterns jQuery habituels et forçant une solution jQuery à ne plus en avoir besoin. http://www.doxdesk.com/img/updates/20091116-so-large.gif –