Adakah yang bisa mengarahkan saya ke beberapa kode untuk menentukan apakah angka dalam JavaScript genap atau ganjil?
%operator daripada &, dan 2. Meskipun &secara teoritis lebih cepat, itu benar-benar tidak masalah .
Adakah yang bisa mengarahkan saya ke beberapa kode untuk menentukan apakah angka dalam JavaScript genap atau ganjil?
%operator daripada &, dan 2. Meskipun &secara teoritis lebih cepat, itu benar-benar tidak masalah .
Jawaban:
Gunakan kode di bawah ini:
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 menunjukkan angka ganjil, sedangkan 0 mewakili angka genap.
0atau 1(atau NaNjika Anda memberinya sesuatu yang bukan angka dan tidak dapat dipaksa menjadi satu), yang akan berfungsi dengan baik untuk sebagian besar situasi. Tetapi jika Anda menginginkan yang asli trueatau false:return (num % 2) == 1;
numbukan bilangan bulat. Yang masih akan bekerja jika Anda membandingkan isOdd(1.5)==true(karena nilai fraksional tidak sama dengan true), tetapi akan lebih baik jika fungsi dikembalikan trueatau falseseperti yang tersirat dengan nama "isOdd".
return !!(num % 2)untuk mendapatkan boolean
Gunakan ANDoperator bitwise .
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>
Jika Anda tidak menginginkan nilai pengembalian string, melainkan nilai boolean, gunakan ini:
var isOdd = function(x) { return x & 1; };
var isEven = function(x) { return !( x & 1 ); };
X % Y!
function isEven(n){return !(n & 1);} .
x & 1Memeriksa apakah bit terakhir diatur dalam angka (karena 1 adalah angka dengan semua bit diatur ke 1 kecuali untuk bit paling tidak signifikan ): Jika adalah , jumlah ini aneh, jika tidak bahkan.
Anda dapat melakukan sesuatu seperti ini:
function isEven(value){
if (value%2 == 0)
return true;
else
return false;
}
if (condition) { answer=true; } else { answer=false; }adalah versi yang tidak perlu bertele - tele answer = (bool) condition;. Kurangi fungsi Anda function isEven(value) { return (bool) (value%2 == 0); }dan kami semua akan senang.
(bool)(yang akan memberikan kesalahan) dan dalam hal apa pun Anda tidak perlu: return value%2 == 0;akan melakukan pekerjaan itu karena ==operator mengembalikan boolean.
answer = !!(condition). Maksud saya mencoba untuk membuat, tentu saja adalah bahwa Anda bisa saja return value%2==0dan tidak perlu repot dengan persyaratan.
value%2===0
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }
Apakah saya harus membuat array sangat besar yang memiliki banyak angka genap
Tidak. Gunakan modulus (%). Ini memberi Anda sisa dari dua angka yang Anda bagi.
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.
Ini berarti jika Anda mengubah angka apa saja x x 2, Anda mendapatkan 0 atau 1 atau -1. 0 berarti itu genap. Ada lagi yang berarti aneh.
Seperti banyak bahasa, Javascript memiliki operator modulus% , yang menemukan sisa pembagian. Jika tidak ada sisa setelah pembagian dengan 2, jumlahnya genap:
// this expression is true if "number" is even, false otherwise
(number % 2 == 0)
Ini adalah ungkapan yang sangat umum untuk pengujian bahkan untuk bilangan bulat.
Dengan bitwise, codegolfing:
var isEven=n=>(n&1)?"odd":"even";
Fungsi sederhana yang bisa Anda bagikan. Menggunakan operator modulo %:
var is_even = function(x) {
return !(x % 2);
}
is_even(3)
false
is_even(6)
true
return !(x % 2);
Gunakan ekstensi saya:
Number.prototype.isEven=function(){
return this % 2===0;
};
Number.prototype.isOdd=function(){
return !this.isEven();
}
kemudian
var a=5;
a.isEven();
== Salah
a.isOdd();
== Benar
jika Anda tidak yakin apakah itu suatu Angka, ujilah dengan percabangan berikut:
if(a.isOdd){
a.isOdd();
}
PEMBARUAN:
jika Anda tidak akan menggunakan variabel:
(5).isOdd()
Ternyata paradigma prosedural lebih baik daripada paradigma OOP. Omong-omong, saya melakukan profiling di FIDDLE ini . Namun, cara OOP masih tercantik.
Anda bisa menggunakan pernyataan for dan conditional untuk menentukan apakah angka atau serangkaian angka ganjil:
for (var i=1; i<=5; i++)
if (i%2 !== 0) {
console.log(i)
}
Ini akan mencetak setiap nomor ganjil antara 1 dan 5.
Baru saja menjalankan yang ini di Adobe Dreamweaver..itu berfungsi dengan baik. saya dulu if (isNaN (mynmb))
untuk memeriksa apakah Nilai yang diberikan adalah angka atau tidak, dan saya juga menggunakan Math.abs (mynmb% 2) untuk mengubah angka negatif menjadi positif dan menghitung
<!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 {
}
Ganti X dengan nomor Anda (bisa berasal dari variabel). Pernyataan If berjalan ketika nomornya genap, Yang lain ketika itu ganjil.
Jika Anda hanya ingin tahu apakah nomor yang diberikan aneh:
if (X % 2 !== 0){
}
Sekali lagi, ganti X dengan angka atau variabel.
Setiap angka ganjil ketika dibagi dua meninggalkan sisa sebagai 1 dan setiap angka genap ketika dibagi dengan nol meninggalkan nol sebagai sisa. Karenanya kita dapat menggunakan kode ini
function checker(number) {
return number%2==0?even:odd;
}
Bagaimana dengan ini...
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
Inilah yang saya lakukan
//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);
Untuk beberapa alasan saya harus memastikan panjang array kurang satu per satu. Ketika saya tidak melakukan itu, saya mendapatkan "undefined" di elemen terakhir dari array oddNumbers.
Ketika Anda perlu menguji apakah beberapa variabel aneh, Anda harus terlebih dahulu menguji apakah itu bilangan bulat . Juga, perhatikan bahwa ketika Anda menghitung sisanya pada angka negatif, hasilnya akan negatif ( -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
}
Jika Number.isInteger tersedia, Anda juga dapat menyederhanakan kode ini menjadi:
function isOdd(value) {
return Number.isInteger(value) // value should be integer
value % 2 !== 0; // value should not be even
}
Catatan: di sini, kami menguji value % 2 !== 0bukan value % 2 === 1karena -3 % 2 === -1. Jika Anda tidak ingin -1lulus tes ini, Anda mungkin perlu mengubah baris ini.
Berikut ini beberapa kasus uji:
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
Menggunakan % akan membantu Anda melakukan ini ...
Anda dapat membuat beberapa fungsi untuk melakukannya untuk Anda ... Saya lebih suka fungsi separte yang tidak terlampir ke Nomor dalam Javascript seperti ini yang juga memeriksa apakah Anda memberikan nomor atau tidak:
fungsi aneh:
var isOdd = function(num) {
return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};
bahkan fungsi:
var isEven = function(num) {
return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};
dan menyebutnya seperti ini:
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")harus salah. isOdd(1.223)dan isOdd(-1.223)harus salah. isOdd(0)harus salah. isOdd(-1)harus benar. 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 (jika perlu): https://jsfiddle.net/9dzdv593/8/
Solusi Javascript 1-liner. Bagi mereka yang tidak peduli tentang keterbacaan.
const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;
(n % 2) !== 0bukan (n % 2) === 0. (2) Saran saya adalah untuk menghindari !!(n % 2), karena (a) ia memiliki kinerja lebih lambat daripada (n % 2) !== 0( jsperf.com/notnot-vs-strict-not ), (b) ini adalah peretasan - ini memunculkan nilai falsey 0ke dalam false, dan (c) itu tidak jelas (bahasa pemrograman tingkat tinggi tidak boleh dibaca seperti Pascal demi kinerja - itulah tugas kompiler). (3) Ya, {}pernyataan blokir yang hilang menghasilkan beberapa masalah (sebagaimana diperbarui dalam jawaban saya).
if (0) call1(), assign = 0, call2()tetapi satu pernyataan tidak buruk if (0) return; if (0) ;; if (0); break; if (0) continue;:, dan lagi pula saya lebih suka untuk terus menggunakan pernyataan blok break-line ketika saya sudah kondisi garis panjang.
isNaN(n)adalah konyol - yakin Anda menutupi NaNkasus, tapi isOdd(null), isOdd(undefined), isOdd({x:1})semua kembali falseyang saya anggap sebagai kesalahan; kecuali tentu saja Anda hanya menentukan bahwa fungsi Anda memiliki perilaku yang benar di atas domain yang diberikan: hanya input tipe-angka. Dalam hal ini, cukup isNaNcentang dan paksa pengguna untuk memanggilnya dengan jenis yang benar. Pemrograman defensif mengerikan. Maka fungsi Anda disederhanakan menjadi isOdd = x => Math.floor(x) === x && x & 1 === 1- mengembalikan eksplisit trueatau falsenilai tidak diperlukan
null, undefineddan objek {}bukan bilangan bulat ganjil, dan karena itu fungsinya kembali false- tidak yakin mengapa Anda menganggap itu kesalahan. The isNaNcheck adalah untuk kinerja (tidak untuk pertahanan), memungkinkan fungsi keluar sebelum waktunya tanpa melakukan pemeriksaan lainnya.
Saya akan menerapkan ini untuk mengembalikan boolean:
function isOdd (n) {
return !!(n % 2);
// or ((n % 2) !== 0).
}
Ini akan berfungsi pada nomor yang tidak ditandatangani dan ditandatangani. Ketika modulus kembali -1atau 1itu akan diterjemahkan true.
Solusi non-modulus:
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;
}
dalam ES6:
const isOdd = num => num % 2 == 1;
Dengan menggunakan operator ternary, Anda dapat menemukan angka genap ganjil:
var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);
ini berfungsi untuk array:
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]);
ini harus keluar: 4,92 1,9,21,41
hanya untuk nomor:
function evenOrOdd(number) {
if (number % 2 === 0) {
return "even";
}
return "odd";
}
console.log(evenOrOdd(4));
ini akan menghasilkan bahkan ke konsol