Kann mich jemand auf einen Code verweisen, um festzustellen, ob eine Zahl in JavaScript gerade oder ungerade ist?
javascript
Jannie Theunissen
quelle
quelle
%
Operator wüsste als&
und 2. Obwohl&
es theoretisch schneller ist, spielt es wirklich keine Rolle .Antworten:
Verwenden Sie den folgenden Code:
1 steht für eine ungerade Zahl, während 0 für eine gerade Zahl steht.
quelle
0
oder1
(oderNaN
wenn Sie etwas füttern, das keine Zahl ist und nicht zu einer gezwungen werden kann), was in den meisten Situationen gut funktioniert. Aber wenn Sie eine echte wollentrue
oderfalse
:return (num % 2) == 1;
num
es sich nicht um eine Ganzzahl handelt. Was beim Vergleichen immer noch funktioniertisOdd(1.5)==true
(weil ein Bruchwert nicht gleich isttrue
), aber es wäre besser, wenn die Funktion zurückgegeben würdetrue
oderfalse
wie durch den Namen "isOdd" impliziert.return !!(num % 2)
, um einen Booleschen Wert zu erhaltenVerwenden Sie den bitweisen
AND
Operator.Wenn Sie keinen String-Rückgabewert, sondern einen booleschen Wert möchten, verwenden Sie Folgendes:
quelle
X % Y
!function isEven(n){return !(n & 1);}
.x & 1
geprüft, ob das letzte Bit in der Zahl gesetzt ist (da 1 eine Zahl ist, bei der alle Bits bis auf das niedrigstwertige Bit auf 1 gesetzt sind ): Wenn es ist , ist die Zahl ungerade, sonst auch.Sie könnten so etwas tun:
quelle
if (condition) { answer=true; } else { answer=false; }
ist nur eine unnötig wortreiche Version vonanswer = (bool) condition;
. Reduzieren Sie Ihre Funktion auffunction isEven(value) { return (bool) (value%2 == 0); }
und wir werden alle glücklich sein.(bool)
(dies führt zu einem Fehler), und Sie müssen auf keinen Fall:return value%2 == 0;
den Job ausführen, da der==
Operator einen booleschen Wert zurückgibt.answer = !!(condition)
. Der Punkt, den ich ansprechen wollte, ist natürlich, dass Sie sich nurreturn value%2==0
mit der Bedingung beschäftigen können und müssen.value%2===0
quelle
Nein. Modul (%) verwenden. Sie erhalten den Rest der beiden Zahlen, die Sie teilen.
Das heißt, wenn Sie eine Zahl x um 2 modifizieren, erhalten Sie entweder 0 oder 1 oder -1. 0 würde bedeuten, dass es gerade ist. Alles andere würde bedeuten, dass es seltsam ist.
quelle
Dies kann mit einem kleinen Codeausschnitt gelöst werden:
Hoffe das hilft :)
quelle
Wie viele Sprachen hat Javascript einen Moduloperator
%
, der den Rest der Teilung findet. Wenn nach der Division durch 2 kein Rest mehr vorhanden ist, ist eine Zahl gerade:Dies ist eine sehr verbreitete Redewendung zum Testen auf gerade ganze Zahlen.
quelle
Mit bitweisem Codegolfing:
quelle
Eine einfache Funktion, die Sie weitergeben können. Verwendet den Modulo-Operator
%
:quelle
return !(x % 2);
Verwenden Sie meine Erweiterungen:
dann
== Falsch
== Richtig
Wenn Sie nicht sicher sind, ob es sich um eine Zahl handelt, testen Sie sie anhand der folgenden Verzweigung:
UPDATE:
Wenn Sie keine Variable verwenden würden:
Leistung:
Es stellt sich heraus, dass das prozedurale Paradigma besser ist als das OOP-Paradigma. Übrigens habe ich in diesem FIDDLE ein Profiling durchgeführt . Der OOP-Weg ist jedoch immer noch am schönsten.
quelle
Subtrahiere 2 rekursiv davon, bis du entweder -1 oder 0 erreichst (funktioniert natürlich nur für positive ganze Zahlen) :)
quelle
Sie können eine for-Anweisung und eine Bedingung verwenden, um festzustellen, ob eine Zahl oder eine Reihe von Zahlen ungerade ist:
Dadurch wird jede ungerade Zahl zwischen 1 und 5 gedruckt.
quelle
Habe gerade dieses in Adobe Dreamweaver ausgeführt. Es funktioniert perfekt. ich benutzte if (isNaN (mynmb)) verwendet.
um zu überprüfen, ob der angegebene Wert eine Zahl ist oder nicht, und ich habe auch Math.abs (mynmb% 2) verwendet , um eine negative Zahl in eine positive umzuwandeln und zu berechnen
quelle
quelle
Ersetzen Sie X durch Ihre Nummer (kann von einer Variablen stammen). Die If-Anweisung wird ausgeführt, wenn die Zahl gerade ist, die Else-Anweisung, wenn sie ungerade ist.
Wenn Sie nur wissen möchten, ob eine bestimmte Zahl ungerade ist:
Ersetzen Sie X erneut durch eine Zahl oder Variable.
quelle
Jede ungerade Zahl, wenn sie durch zwei geteilt wird, hinterlässt den Rest als 1 und jede gerade Zahl, wenn sie durch Null geteilt wird, hinterlässt eine Null als Rest. Daher können wir diesen Code verwenden
quelle
Wie wäre es damit...
quelle
Das habe ich getan
Aus irgendeinem Grund musste ich sicherstellen, dass die Länge des Arrays um eins kleiner ist. Wenn ich das nicht mache, bekomme ich im letzten Element des oddNumbers-Arrays "undefined".
quelle
Wenn Sie testen müssen, ob eine Variable ungerade ist, sollten Sie zuerst testen, ob sie eine Ganzzahl ist . Beachten Sie außerdem, dass bei der Berechnung des Restbetrags für eine negative Zahl das Ergebnis negativ ist (
-3 % 2 === -1
).Wenn Number.isInteger verfügbar ist, können Sie diesen Code auch vereinfachen, um:
Hinweis: Hier testen wir
value % 2 !== 0
stattvalue % 2 === 1
wegen-3 % 2 === -1
. Wenn du nicht willst-1
diesen Test , müssen Sie möglicherweise diese Zeile ändern.Hier einige Testfälle:
quelle
Verwenden von
%
hilft Ihnen dabei ...Sie können einige Funktionen erstellen, um dies für Sie zu tun ... Ich bevorzuge separate Funktionen, die nicht wie folgt an Number in Javascript angehängt sind und die auch prüfen, ob Sie eine Nummer übergeben oder nicht:
komische Funktion:
gleiche Funktion:
und nenne es so:
quelle
Ein Liner in ES6, nur weil es sauber ist.
const isEven = (num) => num % 2 == 0;
quelle
Viele Menschen verstehen die Bedeutung von ungerade falsch
isOdd("str")
sollte falsch sein.Nur eine ganze Zahl kann ungerade sein.
isOdd(1.223)
undisOdd(-1.223)
sollte falsch sein.Ein float ist keine ganze Zahl.
isOdd(0)
sollte falsch sein.Null ist eine gerade Ganzzahl ( https://en.wikipedia.org/wiki/Parity_of_zero ).
isOdd(-1)
sollte wahr sein.Es ist eine seltsame ganze Zahl.
Lösung
JS Fiddle (falls erforderlich): https://jsfiddle.net/9dzdv593/8/
1-Liner
Javascript 1-Liner-Lösung. Für diejenigen, denen Lesbarkeit egal ist.
quelle
(n % 2) !== 0
statt sein sollen(n % 2) === 0
. (2) Mein Rat ist zu vermeiden!!(n % 2)
, weil (a) es eine langsamere Leistung hat als(n % 2) !== 0
( jsperf.com/notnot-vs-strict-not ), (b) es ein Hack ist - es zwingt einen Falsey-Wert0
infalse
und (c) Es ist dunkel (Programmiersprachen auf hoher Ebene sollten aus Gründen der Leistung nicht wie Pascal gelesen werden - das ist die Aufgabe des Compilers). (3) Ja, fehlende{}
Blockanweisungen führen zu mehreren Problemen (wie in meiner Antwort aktualisiert).if (0) call1(), assign = 0, call2()
, aber eine einzelne Anweisung ist nicht schlecht:if (0) return; if (0) ;; if (0); break; if (0) continue;
Blockanweisung zusammengeführt werden , und ich bevorzuge es trotzdem, weiterhin Blockanweisungen mit Zeilenumbrüchen zu verwenden, wenn ich habe Long-Inline-Bedingungen.isNaN(n)
dumm sind - sicher , dass Sie den abgedeckteNaN
Fall, aberisOdd(null)
,isOdd(undefined)
,isOdd({x:1})
alle zurück ,false
die ich für einen Fehler sein; es sei denn, Sie geben nur an, dass Ihre Funktion in einer bestimmten Domäne korrekt funktioniert: nur Eingaben vom Typ Nummer. Lassen Sie in diesem Fall einfach denisNaN
Scheck fallen und zwingen Sie den Benutzer, ihn mit dem richtigen Typ aufzurufen. Defensive Programmierung ist schrecklich. Dann wird Ihre Funktion vereinfacht, umisOdd = x => Math.floor(x) === x && x & 1 === 1
- explizite Rückgabetrue
oderfalse
Werte sind nicht erforderlichnull
,undefined
und Objekte{}
sind keine ungeraden Ganzzahlen, und daher gibt die Funktion zurückfalse
- nicht sicher, warum Sie dies als Fehler betrachten. DieisNaN
Prüfung dient der Leistung (nicht der Verteidigung) und lässt die Funktion vorzeitig beendet werden, ohne die anderen Prüfungen durchzuführen.Ich würde dies implementieren, um einen Booleschen Wert zurückzugeben:
Es funktioniert sowohl mit vorzeichenlosen als auch mit vorzeichenbehafteten Nummern. Wenn der Modul zurückkehrt
-1
oder1
übersetzt wirdtrue
.Nichtmodul-Lösung:
quelle
Ein funktionalerer Ansatz im modernen Javascript:
quelle
in ES6:
const isOdd = num => num % 2 == 1;
quelle
quelle
Dies funktioniert für Arrays:
Dies sollte sich abmelden: 4,92 1,9,21,41
für nur eine Zahl:
Dies sollte sogar auf der Konsole ausgegeben werden
quelle