337 votes

Comment déterminer si un nombre est impair en JavaScript ?

Quelqu'un peut-il m'indiquer un code permettant de déterminer si un nombre en JavaScript est pair ou impair ?

8 votes

1 votes

@DavidThomas Je suis en partie d'accord, mais j'ai deux réserves à formuler : 1. Si je devais choisir, je préférerais qu'un programmeur débutant connaisse la % que l'opérateur & et 2. Alors que & est théoriquement plus rapide, cela n'a vraiment pas d'importance .

3 votes

@kojiro : Je préférerais que plus d'options (valides) soient présentées à l'apprenant ; de plus, je n'avais jamais pensé à utiliser bitwise-& de cette manière auparavant, donc c'est un point de vue intéressant. De toute façon, puisque c'est est un doublon, je l'ai signalé pour fusion avec la question préexistante. Avec un peu de chance, les réponses ici (cette réponse particulière au moins) ne seront pas perdues.

476voto

Chii Points 7798
function isOdd(num) { return num % 2;}
console.log("1 is odd " + isOdd(1) == true);
console.log("2 is odd " + isOdd(2) == false);
console.log("3 is odd " + isOdd(3) == true);
console.log("4 is odd " + isOdd(4) == false);

124 votes

Notez que cela renvoie 0 o 1 (ou NaN si vous lui donnez quelque chose qui n'est pas un nombre et qui ne peut pas être transformé en un nombre), ce qui fonctionnera bien dans la plupart des situations. Mais si vous voulez un véritable true o false : return (num % 2) == 1;

5 votes

Oui, bonne remarque sur le NaN. Mais en général, on veut que le javascript soit vrai ou faux, c'est pourquoi je l'ai écrit comme je l'ai fait.

10 votes

Pour clarifier, l'opérateur modulo (%) donne le reste d'une division. Donc 3%2 serait 3/2, laissant 1 comme reste, donc 3%2 retournera 1.

148voto

0x499602D2 Points 36421

Utilisez l'option "bitwise AND opérateur.

function oddOrEven(x) {
  return ( x & 1 ) ? "odd" : "even";
}

Si vous ne voulez pas une valeur de retour de type chaîne, mais plutôt de type booléen, utilisez ceci :

var isOdd = function(x) { return x & 1; };
var isEven  = function(x) { return !( x & 1 ); };

7 votes

+1, ta réponse bat définitivement la mienne, sans oublier que tu as la seule réponse qui n'est pas utiliser X % Y !

6 votes

Je ne sais pas si mon test est exact, mais l'opérateur ET par bit semble être 40 fois plus lent que l'opérateur modulo pour un nombre fixe et 2 fois plus lent pour un nombre aléatoire : jsperf.com/odd-or-even

10 votes

Notez que cela renverra "odd" ou "even" pour les nombres qui ne sont ni l'un ni l'autre (par exemple, 3,14).

34voto

TNC Points 4122

Vous pourriez faire quelque chose comme ça :

function isEven(value){
    if (value%2 == 0)
        return true;
    else
        return false;
}

9 votes

On dirait que tu ne sais pas ce qu'est un booléen. if (condition) { answer=true; } else { answer=false; } est juste une version inutilement verbeuse de answer = (bool) condition; . Réduisez votre fonction à function isEven(value) { return (bool) (value%2 == 0); } et nous serons tous heureux.

31 votes

Pas besoin d'être désagréable, parce que je programme quelque chose de différent.

8 votes

@awm - Il semble que vous ne connaissent pas le JavaScript. Vous ne pouvez pas convertir en booléen avec (bool) (cela donnera une erreur) et de toute façon vous n'en avez pas besoin : return value%2 == 0; fera l'affaire puisque le == renvoie un booléen.

22voto

Isaac Fife Points 1145

Dois-je créer un tableau très grand qui contient beaucoup de nombres pairs ?

Oh, bonté divine, non. Utilisez le module (%). Il vous donne le reste des deux nombres que vous divisez.

Ex. 2 % 2 = 0 because 2/2 = 1 with 0 remainder.

Ex2. 3 % 2 = 1 because 3/2 = 1 with 1 remainder.

Ex3. -7 % 2 = -1 because -7/2 = -3 with -1 remainder.

Cela signifie que si vous modérez un nombre x par 2, vous obtenez soit 0, soit 1, soit -1. 0 signifie que le nombre est pair. Tout autre chiffre signifierait que le nombre est impair.

21voto

CloudyMarble Points 16155
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X