¿Alguien puede señalarme algún código para determinar si un número en JavaScript es par o impar?
%operador &, y 2. Si bien &es teóricamente más rápido, realmente no importa .
¿Alguien puede señalarme algún código para determinar si un número en JavaScript es par o impar?
%operador &, y 2. Si bien &es teóricamente más rápido, realmente no importa .
Respuestas:
Use el siguiente código:
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 representa un número impar, mientras que 0 representa un número par.
0o 1(o NaNsi 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 verdadero trueo false:return (num % 2) == 1;
numno es un número entero. Lo que aún funcionará si compara isOdd(1.5)==true(porque un valor fraccionario no es igual a true), pero sería mejor si la función regresara trueo falsecomo lo implica el nombre "isOdd".
return !!(num % 2)para obtener un booleano
Use el ANDoperador bit a 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 no desea un valor de retorno de cadena, sino un valor booleano, use esto:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y!
function isEven(n){return !(n & 1);}.
x & 1Comprueba 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:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
if (condition) { answer=true; } else { answer=false; }es solo una versión innecesariamente prolija de answer = (bool) condition;. Reduzca su función function 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 simplemente return value%2==0y no necesitas molestarte con el condicional.
value%2===0
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
¿Tengo que hacer una matriz realmente grande que tenga muchos números pares
No. Use el módulo (%). Te da el resto de los dos números que estás dividiendo.
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.
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.
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:
// this expression is true if "number" is even, false otherwise
(number % 2 == 0)
Este es un idioma muy común para probar incluso números enteros.
Con bit a bit, codegolfing:
var isEven=n=>(n&1)?"odd":"even";
Una función simple que puedes pasar. Utiliza el operador de módulo %:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
Usa mis extensiones:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
luego
var a=5;
a.isEven();
== falso
a.isOdd();
== verdadero
Si no está seguro de si es un Número, pruébelo mediante la siguiente ramificación:
if(a.isOdd){
a.isOdd();
}
ACTUALIZACIÓN
si no usarías la variable:
(5).isOdd()
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.
Puede usar un enunciado for y un condicional para determinar si un número o serie de números es impar:
for (var i=1; i<=5; i++)
if (i%2 !== 0) {
console.log(i)
}
Esto imprimirá cada número impar entre 1 y 5.
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
<!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 {
}
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:
if (X % 2 !== 0){
}
Nuevamente, reemplace X con un número o variable.
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
function checker(number) {
return number%2==0?even:odd;
}
Qué tal esto...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
Esto es lo que hice
//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);
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.
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).
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, también puede simplificar este código para:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
Nota: aquí, probamos en value % 2 !== 0lugar de value % 2 === 1es por -3 % 2 === -1. Si no desea -1pasar esta prueba, es posible que deba cambiar esta línea.
Aquí hay algunos casos de prueba:
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
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:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
incluso función:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
y llámalo así:
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")debería ser falso isOdd(1.223)y isOdd(-1.223)debe ser falso isOdd(0)debería ser falso isOdd(-1)Debería ser cierto. 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 es necesario): https://jsfiddle.net/9dzdv593/8/
Solución Javascript 1-liner. Para aquellos a quienes no les importa la legibilidad.
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0lugar 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- 0en false, 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 el NaNcaso, pero isOdd(null), isOdd(undefined), isOdd({x:1})todos regresan falseque 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 el isNaNcheque y obligue al usuario a llamarlo con el tipo correcto. La programación defensiva es horrible. Luego, su función se simplifica a isOdd = x => Math.floor(x) === x && x & 1 === 1- regresar explícito trueo los falsevalores no son necesarios
null, undefinedy los objetos {}no son enteros impares y, por lo tanto, la función regresa false; no estoy seguro de por qué lo considera un error. La isNaNcomprobació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:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
Funcionará tanto en números sin signo como con signo. Cuando regrese el módulo -1o 1se traducirá atrue .
Solución sin módulo:
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;
}
en ES6:
const isOdd = num => num % 2 == 1;
Al usar el operador ternario, podemos encontrar los números pares impares:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
esto funciona para matrices:
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]);
esto debería cerrar sesión: 4,92 1,9,21,41
por solo un número:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
esto debería salir incluso a la consola