Kann mich jemand auf einen Code verweisen, um festzustellen, ob eine Zahl in JavaScript gerade oder ungerade ist?
%Operator wüsste als &und 2. Obwohl &es theoretisch schneller ist, spielt es wirklich keine Rolle .
Kann mich jemand auf einen Code verweisen, um festzustellen, ob eine Zahl in JavaScript gerade oder ungerade ist?
%Operator wüsste als &und 2. Obwohl &es theoretisch schneller ist, spielt es wirklich keine Rolle .
Antworten:
Verwenden Sie den folgenden Code:
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 steht für eine ungerade Zahl, während 0 für eine gerade Zahl steht.
0oder 1(oder NaNwenn 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 wollen trueoder false:return (num % 2) == 1;
numes sich nicht um eine Ganzzahl handelt. Was beim Vergleichen immer noch funktioniert isOdd(1.5)==true(weil ein Bruchwert nicht gleich ist true), aber es wäre besser, wenn die Funktion zurückgegeben würde trueoder falsewie durch den Namen "isOdd" impliziert.
return !!(num % 2), um einen Booleschen Wert zu erhalten
Verwenden Sie den bitweisen ANDOperator.
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>
Wenn Sie keinen String-Rückgabewert, sondern einen booleschen Wert möchten, verwenden Sie Folgendes:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y!
function isEven(n){return !(n & 1);}.
x & 1geprü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:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
if (condition) { answer=true; } else { answer=false; }ist nur eine unnötig wortreiche Version von answer = (bool) condition;. Reduzieren Sie Ihre Funktion auf function 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 nur return value%2==0mit der Bedingung beschäftigen können und müssen.
value%2===0
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
Muss ich ein Array wirklich groß machen, das viele gerade Zahlen hat?
Nein. Modul (%) verwenden. Sie erhalten den Rest der beiden Zahlen, die Sie teilen.
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.
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.
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:
// this expression is true if "number" is even, false otherwise
(number % 2 == 0)
Dies ist eine sehr verbreitete Redewendung zum Testen auf gerade ganze Zahlen.
Mit bitweisem Codegolfing:
var isEven=n=>(n&1)?"odd":"even";
Eine einfache Funktion, die Sie weitergeben können. Verwendet den Modulo-Operator %:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
Verwenden Sie meine Erweiterungen:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
dann
var a=5;
a.isEven();
== Falsch
a.isOdd();
== Richtig
Wenn Sie nicht sicher sind, ob es sich um eine Zahl handelt, testen Sie sie anhand der folgenden Verzweigung:
if(a.isOdd){
a.isOdd();
}
UPDATE:
Wenn Sie keine Variable verwenden würden:
(5).isOdd()
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.
Sie können eine for-Anweisung und eine Bedingung verwenden, um festzustellen, ob eine Zahl oder eine Reihe von Zahlen ungerade ist:
for (var i=1; i<=5; i++)
if (i%2 !== 0) {
console.log(i)
}
Dadurch wird jede ungerade Zahl zwischen 1 und 5 gedruckt.
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
<!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 {
}
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:
if (X % 2 !== 0){
}
Ersetzen Sie X erneut durch eine Zahl oder Variable.
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
function checker(number) {
return number%2==0?even:odd;
}
Wie wäre es damit...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
Das habe ich getan
//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);
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".
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).
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
}
Wenn Number.isInteger verfügbar ist, können Sie diesen Code auch vereinfachen, um:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
Hinweis: Hier testen wir value % 2 !== 0statt value % 2 === 1wegen -3 % 2 === -1. Wenn du nicht willst-1 diesen Test , müssen Sie möglicherweise diese Zeile ändern.
Hier einige Testfälle:
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
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:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
gleiche Funktion:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
und nenne es so:
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")sollte falsch sein. isOdd(1.223)und isOdd(-1.223)sollte falsch sein. isOdd(0)sollte falsch sein. isOdd(-1)sollte wahr sein. 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 (falls erforderlich): https://jsfiddle.net/9dzdv593/8/
Javascript 1-Liner-Lösung. Für diejenigen, denen Lesbarkeit egal ist.
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0statt 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-Wert 0in falseund (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 abgedeckte NaNFall, aber isOdd(null), isOdd(undefined), isOdd({x:1})alle zurück , falsedie 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 den isNaNScheck fallen und zwingen Sie den Benutzer, ihn mit dem richtigen Typ aufzurufen. Defensive Programmierung ist schrecklich. Dann wird Ihre Funktion vereinfacht, um isOdd = x => Math.floor(x) === x && x & 1 === 1- explizite Rückgabe trueoder falseWerte sind nicht erforderlich
null, undefinedund Objekte {}sind keine ungeraden Ganzzahlen, und daher gibt die Funktion zurück false- nicht sicher, warum Sie dies als Fehler betrachten. Die isNaNPrü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:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
Es funktioniert sowohl mit vorzeichenlosen als auch mit vorzeichenbehafteten Nummern. Wenn der Modul zurückkehrt -1oder 1übersetzt wird true.
Nichtmodul-Lösung:
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;
}
in ES6:
const isOdd = num => num % 2 == 1;
Mit dem ternären Operator können Sie die ungeraden geraden Zahlen finden:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
Dies funktioniert für Arrays:
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]);
Dies sollte sich abmelden: 4,92 1,9,21,41
für nur eine Zahl:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
Dies sollte sogar auf der Konsole ausgegeben werden