Alguém pode me indicar algum código para determinar se um número em JavaScript é par ou ímpar?
javascript
Jannie Theunissen
fonte
fonte
%
operador do que&
e 2. Embora&
seja teoricamente mais rápido, realmente não importa .Respostas:
Use o código abaixo:
1 representa um número ímpar, enquanto 0 representa um número par.
fonte
0
ou1
(ouNaN
se você alimentar algo que não é um número e não pode ser coagido em um), o que funcionará bem na maioria das situações. Mas se você quer um realtrue
oufalse
:return (num % 2) == 1;
num
não for um número inteiro. O que ainda funcionará se você compararisOdd(1.5)==true
(porque um valor fracionário não é igual atrue
), mas seria melhor se a função retornassetrue
oufalse
conforme implícita no nome "isOdd".return !!(num % 2)
para obter um booleanoUse o
AND
operador bit a bit .Se você não deseja um valor de retorno de string, mas um valor booleano, use este:
fonte
X % Y
!function isEven(n){return !(n & 1);}
.x & 1
Verifica se o último bit está definido no número (porque 1 É um número com todos os bits definidos como 1, exceto o bit menos significativo ): Se for , o número é ímpar, caso contrário, é par.Você poderia fazer algo assim:
fonte
if (condition) { answer=true; } else { answer=false; }
é apenas uma versão desnecessariamente prolixo deanswer = (bool) condition;
. Reduza sua funçãofunction isEven(value) { return (bool) (value%2 == 0); }
e todos seremos felizes.(bool)
(isso dará um erro) e, em qualquer caso, não precisará:return value%2 == 0;
fará o trabalho, pois o==
operador retorna um booleano.answer = !!(condition)
. O ponto que eu estava tentando enfatizar, é claro, é que você pode apenasreturn value%2==0
e não precisa se preocupar com o condicional.value%2===0
fonte
Não. Use o módulo (%). Ele fornece o restante dos dois números que você está dividindo.
Isso significa que, se você modificar qualquer número x por 2, receberá 0 ou 1 ou -1. 0 significaria que é par. Qualquer outra coisa significaria que é estranho.
fonte
Isso pode ser resolvido com um pequeno trecho de código:
Espero que isto ajude :)
fonte
Como muitas linguagens, o Javascript possui um operador de módulo
%
, que encontra o restante da divisão. Se não houver resto após a divisão por 2, um número é par:Esse é um idioma muito comum para testar números inteiros pares.
fonte
Com o bit a bit, codegolfing:
fonte
Uma função simples que você pode transmitir. Usa o operador modulo
%
:fonte
return !(x % 2);
Use minhas extensões:
então
== False
== Verdadeiro
se você não tiver certeza se é um número, teste-o pela seguinte ramificação:
ATUALIZAÇÃO:
se você não usaria a variável:
Atuação :
Acontece que o paradigma processual é melhor que o paradigma OOP. A propósito, eu realizei a criação de perfis neste FIDDLE . No entanto, o modo POO ainda é mais bonito.
fonte
Subtraia 2 a ele recursivamente até chegar a -1 ou 0 (funciona apenas para números inteiros positivos, obviamente) :)
fonte
Você pode usar uma instrução for e uma condicional para determinar se um número ou série de números é ímpar:
Isso imprimirá todos os números ímpares entre 1 e 5.
fonte
Acabei de executar este no Adobe Dreamweaver .. ele funciona perfeitamente. eu usei if (isNaN (mynmb))
para verificar se o valor fornecido é um número ou não, e também usei Math.abs (mynmb% 2) para converter número negativo em positivo e calcular
fonte
fonte
Substitua X pelo seu número (pode vir de uma variável). A instrução If é executada quando o número é par e Else quando é ímpar.
Se você quer apenas saber se algum número é ímpar:
Mais uma vez, substitua X por um número ou variável.
fonte
Todo número ímpar, quando dividido por duas, deixa o restante como 1 e todo número par, quando dividido por zero, deixa o zero como restante. Portanto, podemos usar esse código
fonte
Que tal agora...
fonte
Foi o que eu fiz
Por alguma razão, tive que garantir que o comprimento da matriz fosse menor em um. Quando não faço isso, fico "indefinido" no último elemento da matriz oddNumbers.
fonte
Quando você precisar testar se alguma variável é ímpar, primeiro teste se ela é inteira . Além disso, observe que, quando você calcula o restante no número negativo, o resultado será negativo (
-3 % 2 === -1
).Se Number.isInteger estiver disponível, você também poderá simplificar esse código para:
Nota: aqui, testamos em
value % 2 !== 0
vez devalue % 2 === 1
é por causa de-3 % 2 === -1
. Se você não quiser-1
passar neste teste, pode ser necessário alterar esta linha.Aqui estão alguns casos de teste:
fonte
Usando
%
ajudará você a fazer isso ...Você pode criar algumas funções para fazer isso por você ... Prefiro separar funções que não estão anexadas a Number em Javascript como este, que também verificam se você está passando número ou não:
Função estranha:
função par:
e chame assim:
fonte
Um revestimento no ES6 apenas porque é limpo.
const isEven = (num) => num % 2 == 0;
fonte
Muitas pessoas entendem mal o significado de
isOdd("str")
deve ser falso.Somente um número inteiro pode ser ímpar.
isOdd(1.223)
eisOdd(-1.223)
deve ser falso.Um flutuador não é um número inteiro.
isOdd(0)
deve ser falso.Zero é um número inteiro par ( https://en.wikipedia.org/wiki/Parity_of_zero ).
isOdd(-1)
deve ser verdade.É um número inteiro ímpar.
Solução
JS Fiddle (se necessário): https://jsfiddle.net/9dzdv593/8/
1 liner
Solução Javascript de 1 liner. Para quem não se importa com legibilidade.
fonte
(n % 2) !== 0
vez de(n % 2) === 0
. (2) O meu conselho é para evitar!!(n % 2)
, porque (a) tem desempenho mais lento que(n % 2) !== 0
( jsperf.com/notnot-vs-strict-not ), (b) é um hack - que coage um valor Falsey0
emfalse
, e (c) é obscuro (linguagens de programação de alto nível não devem ser como Pascal por causa do desempenho - esse é o trabalho do compilador). (3) Sim, as{}
declarações de bloco ausentes resultam em vários problemas (conforme atualizado na minha resposta).if (0) call1(), assign = 0, call2()
, mas uma única instrução não é ruim:if (0) return; if (0) ;; if (0); break; if (0) continue;
e, de qualquer forma, prefiro continuar usando instruções de bloco de linha de quebra quando tiver condições em linha longa.isNaN(n)
são tolas - certeza de que cobriu oNaN
caso, masisOdd(null)
,isOdd(undefined)
,isOdd({x:1})
todo o retornofalse
que eu considero ser um erro; a menos, claro, que você esteja apenas especificando que sua função tem comportamento correto em um determinado domínio: apenas entradas do tipo Number. Nesse caso, basta largar aisNaN
verificação e forçar o usuário a chamá-la com o tipo correto. A programação defensiva é horrível. Em seguida, sua função é simplificada paraisOdd = x => Math.floor(x) === x && x & 1 === 1
- retornando explícitotrue
oufalse
valores não são necessáriosnull
,undefined
e objetos{}
não são números inteiros ímpares e, portanto, a função retornafalse
- não sei por que você considera isso um erro. AisNaN
verificação é para desempenho (não para defesa), permite que a função saia prematuramente sem executar as outras verificações.Eu implementaria isso para retornar um booleano:
Funcionará em números não assinados e assinados. Quando o módulo retornar
-1
ou1
será traduzido paratrue
.Solução sem módulo:
fonte
Uma abordagem mais funcional no javascript moderno:
fonte
no ES6:
const isOdd = num => num % 2 == 1;
fonte
fonte
isso funciona para matrizes:
isso deve sair: 4,92 1,9,21,41
por apenas um número:
isso deve gerar até mesmo para o console
fonte