¿Alguien puede señalarme algún código para determinar si un número en JavaScript es par o impar?
javascript
Jannie Theunissen
fuente
fuente
%
operador&
, y 2. Si bien&
es teóricamente más rápido, realmente no importa .Respuestas:
Use el siguiente código:
1 representa un número impar, mientras que 0 representa un número par.
fuente
0
o1
(oNaN
si lo alimenta con algo que no es un número y no se puede forzar en uno), lo que funcionará bien para la mayoría de las situaciones. Pero si quieres un verdaderotrue
ofalse
:return (num % 2) == 1;
num
no es un número entero. Lo que aún funcionará si comparaisOdd(1.5)==true
(porque un valor fraccionario no es igual atrue
), pero sería mejor si la función regresaratrue
ofalse
como lo implica el nombre "isOdd".return !!(num % 2)
para obtener un booleanoUse el
AND
operador bit a bit .Si no desea un valor de retorno de cadena, sino un valor booleano, use esto:
fuente
X % Y
!function isEven(n){return !(n & 1);}
.x & 1
Comprueba si el último bit está establecido en el número (porque 1 es un número con todos los bits establecidos en 1 excepto el bit menos significativo ): Si es así , el número es impar, de lo contrario, par.Podrías hacer algo como esto:
fuente
if (condition) { answer=true; } else { answer=false; }
es solo una versión innecesariamente prolija deanswer = (bool) condition;
. Reduzca su funciónfunction isEven(value) { return (bool) (value%2 == 0); }
y todos seremos felices.(bool)
(eso dará un error) y, en cualquier caso, no necesita:return value%2 == 0;
hará el trabajo ya que el==
operador devuelve un booleano.answer = !!(condition)
. El punto que estaba tratando de hacer, por supuesto, es que puedes simplementereturn value%2==0
y no necesitas molestarte con el condicional.value%2===0
fuente
No. Use el módulo (%). Te da el resto de los dos números que estás dividiendo.
Esto significa que si modificas cualquier número x por 2, obtienes 0 o 1 o -1. 0 significaría que es par. Cualquier otra cosa significaría que es extraño.
fuente
Esto se puede resolver con un pequeño fragmento de código:
Espero que esto ayude :)
fuente
Al igual que muchos idiomas, Javascript tiene un operador de módulo
%
, que encuentra el resto de la división. Si no queda ningún resto después de la división por 2, un número es par:Este es un idioma muy común para probar incluso números enteros.
fuente
Con bit a bit, codegolfing:
fuente
Una función simple que puedes pasar. Utiliza el operador de módulo
%
:fuente
return !(x % 2);
Usa mis extensiones:
luego
== falso
== verdadero
Si no está seguro de si es un Número, pruébelo mediante la siguiente ramificación:
ACTUALIZACIÓN
si no usarías la variable:
Actuación :
Resulta que el paradigma procesal es mejor que el paradigma OOP. Por cierto, realicé la creación de perfiles en este FIDDLE . Sin embargo, la forma OOP sigue siendo la más bonita.
fuente
Reste 2 recursivamente hasta llegar a -1 o 0 (obviamente solo funciona para enteros positivos) :)
fuente
Puede usar un enunciado for y un condicional para determinar si un número o serie de números es impar:
Esto imprimirá cada número impar entre 1 y 5.
fuente
Acabo de ejecutar este en Adobe Dreamweaver ... funciona perfectamente. solía if (isNaN (mynmb))
para verificar si el valor dado es un número o no, y también usé Math.abs (mynmb% 2) para convertir un número negativo a positivo y calcular
fuente
fuente
Reemplace X con su número (puede provenir de una variable). La instrucción If se ejecuta cuando el número es par, el otro cuando es impar.
Si solo quieres saber si algún número es impar:
Nuevamente, reemplace X con un número o variable.
fuente
Cada número impar cuando se divide entre dos deja el resto como 1 y cada número par cuando se divide entre cero deja un cero como resto. Por lo tanto, podemos usar este código
fuente
Qué tal esto...
fuente
Esto es lo que hice
Por alguna razón tuve que asegurarme de que la longitud de la matriz sea menor en uno. Cuando no hago eso, me aparece "indefinido" en el último elemento de la matriz oddNumbers.
fuente
Cuando necesite probar si alguna variable es impar, primero debe probar si es entera . Además, tenga en cuenta que cuando calcule el resto en un número negativo, el resultado será negativo (
-3 % 2 === -1
).Si Number.isInteger está disponible, también puede simplificar este código para:
Nota: aquí, probamos en
value % 2 !== 0
lugar devalue % 2 === 1
es por-3 % 2 === -1
. Si no desea-1
pasar esta prueba, es posible que deba cambiar esta línea.Aquí hay algunos casos de prueba:
fuente
Utilizando
%
te ayudará a hacer esto ...Puede crear un par de funciones para que lo haga por usted ... Prefiero separar las funciones que no están unidas a Number en Javascript como esta, que también comprueba si pasa un número o no:
Función impar:
incluso función:
y llámalo así:
fuente
Un revestimiento en ES6 solo porque está limpio.
const isEven = (num) => num % 2 == 0;
fuente
Mucha gente no entiende el significado de extraño
isOdd("str")
debería ser falsoSolo un número entero puede ser impar.
isOdd(1.223)
yisOdd(-1.223)
debe ser falsoUn flotador no es un número entero.
isOdd(0)
debería ser falsoZero es un entero par ( https://en.wikipedia.org/wiki/Parity_of_zero ).
isOdd(-1)
Debería ser cierto.Es un entero extraño.
Solución
JS Fiddle (si es necesario): https://jsfiddle.net/9dzdv593/8/
1 liner
Solución Javascript 1-liner. Para aquellos a quienes no les importa la legibilidad.
fuente
(n % 2) !== 0
lugar de(n % 2) === 0
. (2) Mi consejo es evitar!!(n % 2)
, porque (a) tiene un rendimiento más lento que(n % 2) !== 0
( jsperf.com/notnot-vs-strict-not ), (b) que es un truco - que coacciona a un valor Falsey-0
enfalse
, y (c) es oscuro (los lenguajes de programación de alto nivel no deberían leerse como Pascal en aras del rendimiento, ese es el trabajo del compilador). (3) Sí, las{}
declaraciones de bloque que faltan resultan en varios problemas (como se actualizó en mi respuesta).if (0) call1(), assign = 0, call2()
, pero una sola declaración no es mala:if (0) return; if (0) ;; if (0); break; if (0) continue;
y de todos modos prefiero continuar usando declaraciones de bloque de línea de corte cuando he condiciones en línea larga.isNaN(n)
son tontos - Seguro que cubría elNaN
caso, peroisOdd(null)
,isOdd(undefined)
,isOdd({x:1})
todos regresanfalse
que considero un error; a menos, por supuesto, que solo esté especificando que su función tiene un comportamiento correcto sobre un dominio dado: solo entradas de tipo Numérico. En ese caso, simplemente suelte elisNaN
cheque y obligue al usuario a llamarlo con el tipo correcto. La programación defensiva es horrible. Luego, su función se simplifica aisOdd = x => Math.floor(x) === x && x & 1 === 1
- regresar explícitotrue
o losfalse
valores no son necesariosnull
,undefined
y los objetos{}
no son enteros impares y, por lo tanto, la función regresafalse
; no estoy seguro de por qué lo considera un error. LaisNaN
comprobación es para el rendimiento (no para la defensa), permite que la función salga prematuramente sin realizar las otras comprobaciones.Implementaría esto para devolver un booleano:
Funcionará tanto en números sin signo como con signo. Cuando regrese el módulo
-1
o1
se traducirá atrue
.Solución sin módulo:
fuente
Un enfoque más funcional en JavaScript moderno:
fuente
en ES6:
const isOdd = num => num % 2 == 1;
fuente
fuente
esto funciona para matrices:
esto debería cerrar sesión: 4,92 1,9,21,41
por solo un número:
esto debería salir incluso a la consola
fuente