Czy ktoś może wskazać mi jakiś kod, aby ustalić, czy liczba w JavaScript jest parzysta czy nieparzysta?
javascript
Jannie Theunissen
źródło
źródło
%
operatorze&
, a także 2. Chociaż&
teoretycznie jest szybszy, to naprawdę nie ma znaczenia .Odpowiedzi:
Użyj poniższego kodu:
1 oznacza liczbę nieparzystą, podczas gdy 0 oznacza liczbę parzystą.
źródło
0
lub1
(lubNaN
jeśli podasz mu coś, co nie jest liczbą i nie da się go zmusić do uzyskania jednej), co zadziała w większości sytuacji. Ale jeśli chcesz prawdziwytrue
lubfalse
:return (num % 2) == 1;
num
nie jest liczbą całkowitą. Co nadal będzie działać, jeśli porównaszisOdd(1.5)==true
(ponieważ wartość ułamkowa nie jest równatrue
), ale byłoby lepiej, gdyby funkcja zwróciłatrue
lubfalse
jak sugeruje nazwa „isOdd”.return !!(num % 2)
wartość logicznąUżyj
AND
operatora bitowego .Jeśli nie chcesz zwracanej wartości ciągu, a raczej wartości logicznej, użyj tego:
źródło
X % Y
!function isEven(n){return !(n & 1);}
.x & 1
Sprawdza, czy ostatni bit jest ustawiony na liczbę (ponieważ 1 to liczba z wszystkimi bitami ustawionymi na 1, z wyjątkiem najmniej znaczącego bitu ): Jeśli to jest liczba jest nieparzysta, w przeciwnym razie nawet.Możesz zrobić coś takiego:
źródło
if (condition) { answer=true; } else { answer=false; }
jest po prostu niepotrzebnie mylącą wersjąanswer = (bool) condition;
. Zmniejsz swoją funkcję do,function isEven(value) { return (bool) (value%2 == 0); }
a wszyscy będziemy szczęśliwi.(bool)
( spowoduje to błąd), aw każdym razie nie musisz:return value%2 == 0;
wykona zadania, ponieważ==
operator zwraca boolean.answer = !!(condition)
. Rzecz, o której starałem się oczywiście powiedzieć, to, że możesz po prostureturn value%2==0
i nie musisz zawracać sobie głowy warunkami.value%2===0
źródło
Nie. Użyj modułu (%). Daje ci resztę dwóch liczb, które dzielisz.
Oznacza to, że jeśli zmodyfikujesz dowolną liczbę x o 2, otrzymasz 0, 1 lub -1. 0 oznacza, że jest parzysta. Wszystko inne oznaczałoby, że to dziwne.
źródło
Można to rozwiązać za pomocą małego fragmentu kodu:
Mam nadzieję że to pomoże :)
źródło
Podobnie jak wiele języków, Javascript ma operator modułu
%
, który znajduje resztę podziału. Jeśli nie ma reszty po podzieleniu przez 2, liczba jest parzysta:Jest to bardzo powszechny idiom do testowania nawet liczb całkowitych.
źródło
Z bitowym kodowaniem:
źródło
Prosta funkcja, którą możesz przekazać. Używa operatora modulo
%
:źródło
return !(x % 2);
Użyj moich rozszerzeń:
następnie
== Fałsz
== Prawda
jeśli nie masz pewności, czy jest to liczba, przetestuj ją, wykonując następujące rozgałęzienia:
AKTUALIZACJA :
jeśli nie używałbyś zmiennej:
Występ :
Okazuje się, że paradygmat proceduralny jest lepszy niż paradygmat OOP. Nawiasem mówiąc, przeprowadziłem profilowanie w tym FIDDLE . Jednak sposób OOP jest nadal najładniejszy.
źródło
Odejmij 2 rekurencyjnie, aż osiągniesz -1 lub 0 (oczywiście działa tylko dla dodatnich liczb całkowitych) :)
źródło
Możesz użyć instrukcji for i warunku, aby ustalić, czy liczba lub seria liczb jest nieparzysta:
Spowoduje to wydrukowanie każdej liczby nieparzystej od 1 do 5.
źródło
Właśnie wykonałem ten w Adobe Dreamweaver .. działa idealnie. użyłem if (isNaN (mynmb))
aby sprawdzić, czy podana wartość jest liczbą, czy nie, a także użyłem Math.abs (mynmb% 2) do konwersji liczby ujemnej na dodatnią i obliczenia
źródło
źródło
Zamień X na swój numer (może pochodzić ze zmiennej). Instrukcja If działa, gdy liczba jest parzysta, a Else, gdy jest nieparzysta.
Jeśli chcesz tylko wiedzieć, czy dana liczba jest nieparzysta:
Ponownie zamień X na liczbę lub zmienną.
źródło
Każda liczba nieparzysta podzielona przez dwa liście pozostawia jako 1, a każda liczba parzysta podzielona przez zero pozostawia zero jako resztę. Dlatego możemy użyć tego kodu
źródło
Co powiesz na to...
źródło
Oto co zrobiłem
Z jakiegoś powodu musiałem się upewnić, że długość tablicy jest mniejsza o jeden. Gdy tego nie robię, „niezdefiniowany” staje się w ostatnim elemencie tablicy oddNumbers.
źródło
Kiedy musisz sprawdzić, czy jakaś zmienna jest nieparzysta, najpierw sprawdź, czy jest ona liczbą całkowitą . Zwróć też uwagę, że podczas obliczania reszty na liczbie ujemnej wynik będzie ujemny (
-3 % 2 === -1
).Jeśli Number.isInteger jest dostępny, możesz również uprościć ten kod, aby:
Uwaga: tutaj testujemy
value % 2 !== 0
zamiast zvalue % 2 === 1
powodu-3 % 2 === -1
. Jeśli nie chcesz-1
przejść tego testu, może być konieczna zmiana tego wiersza.Oto kilka przypadków testowych:
źródło
Za pomocą
%
pomoże ci to zrobić ...Możesz stworzyć dla siebie kilka funkcji ... Wolę osobne funkcje, które nie są dołączone do Number w JavaScript, takie jak ta, która sprawdza również, czy przekazujesz numer, czy nie:
funkcja nieparzysta:
nawet funkcja:
i nazwij to tak:
źródło
Jedna wkładka w ES6 tylko dlatego, że jest czysta.
const isEven = (num) => num % 2 == 0;
źródło
Wiele osób źle rozumie znaczenie nieparzystości
isOdd("str")
powinno być fałszywe.Tylko liczba całkowita może być nieparzysta.
isOdd(1.223)
iisOdd(-1.223)
powinno być fałszywe.Liczba zmiennoprzecinkowa nie jest liczbą całkowitą.
isOdd(0)
powinno być fałszywe.Zero to parzysta liczba całkowita ( https://en.wikipedia.org/wiki/Parity_of_zero ).
isOdd(-1)
powinno być prawdą.To dziwna liczba całkowita.
Rozwiązanie
JS Fiddle (w razie potrzeby): https://jsfiddle.net/9dzdv593/8/
1-liniowy
JavaScript 1-liniowy. Dla tych, którzy nie dbają o czytelność.
źródło
(n % 2) !== 0
zamiast(n % 2) === 0
. (2) Moja rada jest, aby unikać!!(n % 2)
, ponieważ (a) ma mniejszą wydajność niż(n % 2) !== 0
( jsperf.com/notnot-vs-strict-not ), (b) to hack - to wymusza wartość falsey0
sięfalse
, oraz (c) jest niejasny (języki programowania wysokiego poziomu nie powinny czytać jak Pascal ze względu na wydajność - to zadanie kompilatora). (3) Tak, brakujące{}
instrukcje blokowe powodują kilka problemów (zaktualizowanych w mojej odpowiedzi).if (0) call1(), assign = 0, call2()
, ale jedno zdanie nie jest złe:if (0) return; if (0) ;; if (0); break; if (0) continue;
i w każdym razie wolę nadal używać oświadczeń blokowych linii podziału, gdy warunki o długich rzędach.isNaN(n)
są głupie - na pewno dotyczyłoNaN
sprawy, aleisOdd(null)
,isOdd(undefined)
,isOdd({x:1})
wszystko zwrotfalse
które uważam za błąd; chyba że oczywiście określasz tylko, że funkcja ma poprawne zachowanie w danej domenie: tylko dane liczbowe. W takim przypadku po prostu upuśćisNaN
czek i zmuś użytkownika do wywołania go odpowiednim typem. Programowanie obronne jest okropne. Wtedy twoja funkcja jest uproszczona doisOdd = x => Math.floor(x) === x && x & 1 === 1
- zwracanie jawnychtrue
lubfalse
wartości nie jest koniecznenull
,undefined
a obiekty{}
nie są nieparzystymi liczbami całkowitymi, dlatego funkcja zwracafalse
- nie wiem, dlaczego uważasz to za błąd.isNaN
Wyboru jest do wykonania (nie do obrony), pozwala na wyjście funkcji przedwcześnie bez wykonywania innych czynności.Zaimplementowałbym to, aby zwrócić wartość logiczną:
Będzie działać zarówno na liczbach niepodpisanych, jak i podpisanych. Kiedy moduł powróci
-1
lub1
zostanie przetłumaczony natrue
.Rozwiązanie niemodułowe:
źródło
Bardziej funkcjonalne podejście we współczesnym javascript:
źródło
w ES6:
const isOdd = num => num % 2 == 1;
źródło
źródło
działa to na tablice:
to powinno się wylogować: 4,92 1,9,21,41
tylko dla liczby:
powinno to wypisać nawet na konsolę
źródło