Quelqu'un peut-il m'indiquer du code pour déterminer si un nombre en JavaScript est pair ou impair?
%opérateur plutôt que &, et 2. Bien que &théoriquement plus rapide, cela n'a vraiment pas d'importance .
Quelqu'un peut-il m'indiquer du code pour déterminer si un nombre en JavaScript est pair ou impair?
%opérateur plutôt que &, et 2. Bien que &théoriquement plus rapide, cela n'a vraiment pas d'importance .
Réponses:
Utilisez le code ci-dessous:
function isOdd(num) { return num % 2;}
console.log("1 is " + isOdd(1));
console.log("2 is " + isOdd(2));
console.log("3 is " + isOdd(3));
console.log("4 is " + isOdd(4));
1 représente un nombre impair, tandis que 0 représente un nombre pair.
0ou 1(ou NaNsi vous l'introduisez quelque chose qui n'est pas un nombre et ne peut pas être contraint en un), ce qui fonctionnera bien dans la plupart des situations. Mais si vous voulez un vrai trueou false:return (num % 2) == 1;
numn'est pas un entier. Ce qui fonctionnera toujours si vous comparez isOdd(1.5)==true(car une valeur fractionnaire n'est pas égale à true), mais il serait préférable que la fonction retourne trueou falsecomme l'indique le nom "isOdd".
return !!(num % 2)pour obtenir un booléen
Utilisez l' ANDopérateur au niveau du bit .
function oddOrEven(x) {
return ( x & 1 ) ? "odd" : "even";
}
function checkNumber(argNumber) {
document.getElementById("result").innerHTML = "Number " + argNumber + " is " + oddOrEven(argNumber);
}
checkNumber(17);
<div id="result" style="font-size:150%;text-shadow: 1px 1px 2px #CE5937;" ></div>
Si vous ne voulez pas une valeur de retour de chaîne, mais plutôt une valeur booléenne, utilisez ceci:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y
function isEven(n){return !(n & 1);}.
x & 1vérification si le dernier bit est défini dans le nombre (car 1 est un nombre avec tous les bits définis sur 1, à l'exception du bit le moins significatif ): Si c'est , le nombre est impair, sinon même.
Vous pouvez faire quelque chose comme ça:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
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.
(bool)(cela donnera une erreur) et dans tous les cas vous n'avez pas besoin de: return value%2 == 0;fera le travail puisque l' ==opérateur retourne un booléen.
answer = !!(condition). Le point que j'essayais de faire valoir, bien sûr, c'est que vous pouvez return value%2==0et n'avez pas besoin de vous soucier du conditionnel.
value%2===0
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
Dois-je faire un tableau vraiment grand qui a beaucoup de nombres pairs
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 modifiez un nombre x par 2, vous obtenez 0 ou 1 ou -1. 0 signifierait que c'est pair. Tout le reste signifierait que c'est étrange.
Comme de nombreuses langues, Javascript a un opérateur de module% , qui trouve le reste de la division. S'il n'y a pas de reste après la division par 2, un nombre est même:
// this expression is true if "number" is even, false otherwise
(number % 2 == 0)
Il s'agit d'un idiome très courant pour tester les entiers pairs.
Avec le bit à bit, le codegolfing:
var isEven=n=>(n&1)?"odd":"even";
Une fonction simple que vous pouvez faire circuler. Utilise l'opérateur modulo %:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
Utilisez mes extensions:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
puis
var a=5;
a.isEven();
== Faux
a.isOdd();
== Vrai
si vous n'êtes pas sûr qu'il s'agisse d'un nombre, testez-le par la branche suivante:
if(a.isOdd){
a.isOdd();
}
METTRE À JOUR :
si vous n'utilisez pas de variable:
(5).isOdd()
Il s'avère que le paradigme procédural est meilleur que le paradigme OOP. Soit dit en passant, j'ai effectué le profilage dans ce FIDDLE . Cependant, la méthode OOP est toujours la plus jolie.
Vous pouvez utiliser une instruction for et un conditionnel pour déterminer si un nombre ou une série de nombres est impair:
for (var i=1; i<=5; i++)
if (i%2 !== 0) {
console.log(i)
}
Cela imprimera chaque nombre impair compris entre 1 et 5.
Je viens d'exécuter celui-ci dans Adobe Dreamweaver..il fonctionne parfaitement. j'ai utilisé if (isNaN (mynmb))
pour vérifier si la valeur donnée est un nombre ou non, et j'ai également utilisé Math.abs (mynmb% 2) pour convertir un nombre négatif en positif et calculer
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body bgcolor = "#FFFFCC">
<h3 align ="center"> ODD OR EVEN </h3><table cellspacing = "2" cellpadding = "5" bgcolor="palegreen">
<form name = formtwo>
<td align = "center">
<center><BR />Enter a number:
<input type=text id="enter" name=enter maxlength="10" />
<input type=button name = b3 value = "Click Here" onClick = compute() />
<b>is<b>
<input type=text id="outtxt" name=output size="5" value="" disabled /> </b></b></center><b><b>
<BR /><BR />
</b></b></td></form>
</table>
<script type='text/javascript'>
function compute()
{
var enter = document.getElementById("enter");
var outtxt = document.getElementById("outtxt");
var mynmb = enter.value;
if (isNaN(mynmb))
{
outtxt.value = "error !!!";
alert( 'please enter a valid number');
enter.focus();
return;
}
else
{
if ( mynmb%2 == 0 ) { outtxt.value = "Even"; }
if ( Math.abs(mynmb%2) == 1 ) { outtxt.value = "Odd"; }
}
}
</script>
</body>
</html>
<script>
function even_odd(){
var num = document.getElementById('number').value;
if ( num % 2){
document.getElementById('result').innerHTML = "Entered Number is Odd";
}
else{
document.getElementById('result').innerHTML = "Entered Number is Even";
}
}
</script>
</head>
<body>
<center>
<div id="error"></div>
<center>
<h2> Find Given Number is Even or Odd </h2>
<p>Enter a value</p>
<input type="text" id="number" />
<button onclick="even_odd();">Check</button><br />
<div id="result"><b></b></div>
</center>
</center>
</body>
if (X % 2 === 0){
} else {
}
Remplacez X par votre numéro (peut provenir d'une variable). L'instruction If s'exécute lorsque le nombre est pair, Else lorsqu'il est impair.
Si vous voulez simplement savoir si un nombre donné est impair:
if (X % 2 !== 0){
}
Encore une fois, remplacez X par un nombre ou une variable.
Chaque nombre impair lorsqu'il est divisé par deux feuilles reste comme 1 et chaque nombre pair lorsqu'il est divisé par zéro laisse un zéro comme reste. Par conséquent, nous pouvons utiliser ce code
function checker(number) {
return number%2==0?even:odd;
}
Que dis-tu de ça...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
C'est ce que j'ai fait
//Array of numbers
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,32,23,643,67,5876,6345,34,3453];
//Array of even numbers
var evenNumbers = [];
//Array of odd numbers
var oddNumbers = [];
function classifyNumbers(arr){
//go through the numbers one by one
for(var i=0; i<=arr.length-1; i++){
if (arr[i] % 2 == 0 ){
//Push the number to the evenNumbers array
evenNumbers.push(arr[i]);
} else {
//Push the number to the oddNumbers array
oddNumbers.push(arr[i]);
}
}
}
classifyNumbers(numbers);
console.log('Even numbers: ' + evenNumbers);
console.log('Odd numbers: ' + oddNumbers);
Pour une raison quelconque, j'ai dû m'assurer que la longueur du tableau est inférieure de un. Lorsque je ne fais pas cela, j'obtiens "undefined" dans le dernier élément du tableau oddNumbers.
Lorsque vous devez tester si une variable est impaire, vous devez d'abord tester si elle est entière . Notez également que lorsque vous calculez le reste sur un nombre négatif, le résultat sera négatif ( -3 % 2 === -1).
function isOdd(value) {
return typeof value === "number" && // value should be a number
isFinite(value) && // value should be finite
Math.floor(value) === value && // value should be integer
value % 2 !== 0; // value should not be even
}
Si Number.isInteger est disponible, vous pouvez également simplifier ce code pour:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
Remarque: ici, nous testons value % 2 !== 0au lieu de value % 2 === 1c'est à cause de -3 % 2 === -1. Si vous ne voulez pas -1réussir ce test, vous devrez peut-être modifier cette ligne.
Voici quelques cas de test:
isOdd(); // false
isOdd("string"); // false
isOdd(Infinity); // false
isOdd(NaN); // false
isOdd(0); // false
isOdd(1.1); // false
isOdd("1"); // false
isOdd(1); // true
isOdd(-1); // true
L'utilisation %vous aidera à le faire ...
Vous pouvez créer quelques fonctions pour le faire pour vous ... Je préfère les fonctions séparées qui ne sont pas attachées à Number en Javascript comme ceci qui vérifient également si vous passez un nombre ou non:
fonction impaire:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
même fonction:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
et appelez-le comme ceci:
isOdd(5); // true
isOdd(6); // false
isOdd(12); // false
isOdd(18); // false
isEven(18); // true
isEven('18'); // 'NaN'
isEven('17'); // 'NaN'
isOdd(null); // 'NaN'
isEven('100'); // true
isOdd("str")devrait être faux. isOdd(1.223)et isOdd(-1.223)devrait être faux. isOdd(0)devrait être faux. isOdd(-1)devrait être vrai. function isOdd(n) {
// Must be a number
if (isNaN(n)) {
return false;
}
// Number must not be a float
if ((n % 1) !== 0) {
return false;
}
// Integer must not be equal to zero
if (n === 0) {
return false;
}
// Integer must be odd
if ((n % 2) !== 0) {
return true;
}
return false;
}
JS Fiddle (si nécessaire): https://jsfiddle.net/9dzdv593/8/
Solution Javascript 1 ligne. Pour ceux qui ne se soucient pas de la lisibilité.
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0au lieu de (n % 2) === 0. (2) Mon conseil est d'éviter !!(n % 2), parce que (a) il a des performances plus lentes que (n % 2) !== 0( jsperf.com/notnot-vs-strict-not ), (b) c'est un hack - il contraint une valeur de falsey 0dans false, et (c) c'est obscur (les langages de programmation de haut niveau ne devraient pas lire comme Pascal pour des raisons de performances - c'est le travail du compilateur). (3) Oui, les {}déclarations de bloc manquantes entraînent plusieurs problèmes (comme mis à jour dans ma réponse).
if (0) call1(), assign = 0, call2()mais une seule instruction n'est pas mauvaise if (0) return; if (0) ;; if (0); break; if (0) continue;:, et de toute façon je préfère continuer à utiliser des instructions de bloc de ligne de rupture quand j'ai conditions longues en ligne.
isNaN(n)sont stupides - que vous avez couvert le NaNcas, mais isOdd(null), isOdd(undefined), isOdd({x:1})tout retour falseque je considère comme une erreur; à moins bien sûr que vous spécifiez seulement que votre fonction a un comportement correct sur un domaine donné: uniquement des entrées de type numérique. Dans ce cas, déposez simplement le isNaNchèque et forcez l'utilisateur à l'appeler avec le type correct. La programmation défensive est horrible. Ensuite, votre fonction est simplifiée isOdd = x => Math.floor(x) === x && x & 1 === 1- renvoyer des valeurs explicites trueou falseinutiles
null, undefinedet les objets {}ne sont pas des entiers impairs, et donc la fonction retourne false- vous ne savez pas pourquoi vous considérez cela comme une erreur. Le isNaNcontrôle est pour les performances (pas pour la défense), il permet de quitter la fonction prématurément sans effectuer les autres contrôles.
J'implémenterais ceci pour retourner un booléen:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
Cela fonctionnera sur les numéros non signés et signés. Lorsque le module reviendra -1ou 1il sera traduit entrue .
Solution sans module:
var is_finite = isFinite;
var is_nan = isNaN;
function isOdd (discriminant) {
if (is_nan(discriminant) && !is_finite(discriminant)) {
return false;
}
// Unsigned numbers
if (discriminant >= 0) {
while (discriminant >= 1) discriminant -= 2;
// Signed numbers
} else {
if (discriminant === -1) return true;
while (discriminant <= -1) discriminant += 2;
}
return !!discriminant;
}
dans ES6:
const isOdd = num => num % 2 == 1;
En utilisant l'opérateur ternaire, vous pouvez trouver les nombres pairs impairs:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
cela fonctionne pour les tableaux:
function evenOrOdd(numbers) {
const evenNumbers = [];
const oddNumbers = [];
numbers.forEach(number => {
if (number % 2 === 0) {
evenNumbers.push(number);
} else {
oddNumbers.push(number);
}
});
console.log("Even: " + evenNumbers + "\nOdd: " + oddNumbers);
}
evenOrOdd([1, 4, 9, 21, 41, 92]);
cela devrait se déconnecter: 4,92 1,9,21,41
pour un certain nombre:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
cela devrait sortir même sur la console