JavaScript kodundaki bir sayının çift mi yoksa tek mi olduğunu belirlemek için kimse beni bazı kodlara yönlendirebilir mi?
%
operatörü daha iyi biliyordu &
ve 2. &
Teorik olarak daha hızlı olsa da, gerçekten önemli değil .
JavaScript kodundaki bir sayının çift mi yoksa tek mi olduğunu belirlemek için kimse beni bazı kodlara yönlendirebilir mi?
%
operatörü daha iyi biliyordu &
ve 2. &
Teorik olarak daha hızlı olsa da, gerçekten önemli değil .
Yanıtlar:
Aşağıdaki kodu kullanın:
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 tek bir sayıyı, 0 ise çift bir sayıyı temsil eder.
0
veya 1
(veya NaN
sayı olmayan ve birine zorlanamayan bir şeyi beslerseniz), çoğu durumda işe yarayacağını unutmayın. Ama gerçek true
ya da isterseniz false
:return (num % 2) == 1;
num
tamsayı değilse bu bir kesir döndürür . Karşılaştırırsanız isOdd(1.5)==true
( yine de kesirli bir değere eşit olmadığı için true
) yine de çalışır , ancak işlev döndürüldüğünde true
veya false
"isOdd" adının ima ettiği gibi daha iyi olur .
return !!(num % 2)
bir boole elde edebilirsiniz
Bitsel AND
işleci kullanın .
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>
Bir dize döndürme değeri değil, bir boole değeri istiyorsanız, bunu kullanın:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y
!
function isEven(n){return !(n & 1);}
.
x & 1
Son bitin sayıda ayarlanıp ayarlanmadığını kontrol eder (çünkü 1, en az anlamlı bit dışında tüm bitler 1'e ayarlanmış bir sayıdır ): bu takdirde ise , sayı aksi bile garip.
Bunun gibi bir şey yapabilirsiniz:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
if (condition) { answer=true; } else { answer=false; }
sadece gereksiz bir kelime answer = (bool) condition;
. İşlevinizi azaltın function isEven(value) { return (bool) (value%2 == 0); }
ve hepimiz mutlu olacağız.
(bool)
(bu bir hata verir) boole yazamazsınız ve her durumda yapmanız gerekmez: operatör bir boole döndürdüğü return value%2 == 0;
için işi yapar ==
.
answer = !!(condition)
. Yapmaya çalıştığım nokta, elbette return value%2==0
koşullu ile uğraşmanıza gerek yok.
value%2===0
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
Çok sayıda çift sayıya sahip bir dizi yapmak zorunda mıyım?
Hayır. Modülü (%) kullanın. Böldüğünüz iki sayının kalanını size verir.
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.
Bu, x ile 2 sayısını değiştirirseniz, 0 veya 1 veya -1 elde edeceğiniz anlamına gelir. 0 eşit olduğu anlamına gelir. Başka bir şey tuhaf olduğu anlamına gelir.
Birçok dil gibi Javascript'in de bölünmenin kalanını bulan bir modül operatörü%
vardır . 2'ye bölündükten sonra kalan yoksa, bir sayı çifttir:
// this expression is true if "number" is even, false otherwise
(number % 2 == 0)
Bu, tam sayıları bile test etmek için çok yaygın bir deyimdir.
Bitsel olarak, codegolfing:
var isEven=n=>(n&1)?"odd":"even";
Basit bir işlev üzerinden geçebilirsiniz. Modulo operatörünü kullanır %
:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
Uzantılarımı kullan:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
sonra
var a=5;
a.isEven();
== False
a.isOdd();
== Gerçek
Bir Sayı olup olmadığından emin değilseniz, aşağıdaki dallara göre test edin:
if(a.isOdd){
a.isOdd();
}
GÜNCELLEME :
değişken kullanmazsanız:
(5).isOdd()
Prosedür paradigmasının OOP paradigmasından daha iyi olduğu ortaya çıktı. Bu arada, bu FIDDLE'da profil oluşturma yaptım . Ancak, OOP yolu hala en güzel.
Sadece bunu Adobe Dreamweaver'da yürüttüm ... mükemmel çalışıyor. i (isNaN (mynmb)) ise kullanılır
Değer bir sayı olup olmadığını kontrol etmek için, ve ben de negatif sayıyı pozitif dönüştürmek ve hesaplamak için Math.abs (mynmb% 2) kullandım
<!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 {
}
X'i numaranızla değiştirin (bir değişkenden gelebilir). If ifadesi sayı çift olduğunda, diğerse tek olduğunda çalışır.
Herhangi bir sayının garip olup olmadığını bilmek istiyorsanız:
if (X % 2 !== 0){
}
Yine, X'i bir sayı veya değişkenle değiştirin.
İki yaprağa bölündüğünde her bir tek sayı 1 olarak kalır ve sıfıra bölündüğünde her bir çift sayı olarak bir sıfır bırakır. Bu nedenle bu kodu kullanabiliriz
function checker(number) {
return number%2==0?even:odd;
}
Buna ne dersin...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
Ben de öyle yaptım
//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);
Nedense dizi uzunluğunun tek tek olduğundan emin olmak zorunda kaldı. Bunu yapmadığımda, oddNumbers dizisinin son öğesinde "tanımsız" alıyorum.
Bir değişkenin garip olup olmadığını test etmeniz gerektiğinde, önce tamsayı olup olmadığını test etmelisiniz . Ayrıca, negatif sayıdaki kalanları hesapladığınızda sonucun negatif ( -3 % 2 === -1
) olacağını unutmayın .
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
}
Number.isInteger varsa, bu kodu aşağıdakiler için basitleştirebilirsiniz:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
Not: Burada, value % 2 !== 0
bunun yerine value % 2 === 1
nedeniyle test ediyoruz -3 % 2 === -1
. -1
Bu testi geçmek istemiyorsanız , bu satırı değiştirmeniz gerekebilir.
İşte bazı test örnekleri:
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
Kullanmak %
bunu yapmanıza yardımcı olacaktır ...
Bunu sizin için yapmak için birkaç işlev oluşturabilirsiniz ... Ben böyle numara Javascript'te bağlı olmayan ve aynı zamanda sayı geçip geçmediğini kontrol eden ayrı işlevleri tercih ederim:
Tek işlev:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
çift işlev:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
ve şöyle deyin:
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")
yanlış olmalı. isOdd(1.223)
ve isOdd(-1.223)
yanlış olmalı. isOdd(0)
yanlış olmalı. isOdd(-1)
doğru olmalı. 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 (gerekirse): https://jsfiddle.net/9dzdv593/8/
Javascript 1-astar çözümü. Okunabilirliği umursamayanlar için.
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0
yerine olması gerekirdi (n % 2) === 0
. (2) Benim tavsiyem kaçınmaktır !!(n % 2)
(a) daha yavaş performansa sahip olduğundan, (n % 2) !== 0
( jsperf.com/notnot-vs-strict-not ), (b) bir hack - bu bir Falsey değerini coerces 0
içine false
, ve (c) karanlık (yüksek seviyeli programlama dilleri performans uğruna Pascal gibi okunmamalıdır - bu derleyicinin işi). (3) Evet, eksik {}
blok ifadeleri çeşitli sorunlara neden olur (cevabımda güncellendiği gibi).
if (0) call1(), assign = 0, call2()
ama tek bir ifade kötü değil: if (0) return; if (0) ;; if (0); break; if (0) continue;
ve yine de ben kesme satır bloğu deyimlerini kullanmaya devam etmeyi tercih ederim uzun satır içi koşullar.
isNaN(n)
saçma - emin kaplı NaN
durumda, ancak isOdd(null)
, isOdd(undefined)
, isOdd({x:1})
bütün dönüş false
bir hata olduğunu düşündüğümüz; tabii ki sadece fonksiyonunuzun belirli bir alan üzerinde doğru davranışa sahip olduğunu belirtmiyorsanız: sadece Sayı-tipi girdiler. Bu durumda, isNaN
onay kutusunu bırakın ve kullanıcıyı doğru türle aramaya zorlayın. Defansif programlama korkunç. Daha sonra fonksiyonunuz basitleştirilir isOdd = x => Math.floor(x) === x && x & 1 === 1
- müstehcen dönüş true
veya false
değerler gerekli değildir
null
, undefined
ve nesneler {}
tek tamsayı değildir ve bu nedenle işlev döner false
- neden bir hata olduğunu düşündüğünüzden emin değilsiniz. isNaN
Çek, diğer kontroller yapılmadan erken fonksiyon çıkış sağlayan (değil savunma için) performansına ilişkindir.
Bunu bir boole döndürmek için uygularım:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
Hem imzasız hem de imzalı sayılar üzerinde çalışır. Modül döndüğünde -1
ya 1
da çevrilince true
.
Modül olmayan çözelti:
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;
}
ES6'da:
const isOdd = num => num % 2 == 1;
Üçlü operatör kullanarak tek çift sayıları bulabiliriz:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
bu diziler için çalışır:
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]);
çıkış yapmalı: 4,92 1,9,21,41
sadece bir numara için:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
bu bile konsola gönderilmelidir