Adakah yang bisa mengarahkan saya ke beberapa kode untuk menentukan apakah angka dalam JavaScript genap atau ganjil?
javascript
Jannie Theunissen
sumber
sumber
%
operator daripada&
, dan 2. Meskipun&
secara teoritis lebih cepat, itu benar-benar tidak masalah .Jawaban:
Gunakan kode di bawah ini:
1 menunjukkan angka ganjil, sedangkan 0 mewakili angka genap.
sumber
0
atau1
(atauNaN
jika 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 aslitrue
ataufalse
:return (num % 2) == 1;
num
bukan bilangan bulat. Yang masih akan bekerja jika Anda membandingkanisOdd(1.5)==true
(karena nilai fraksional tidak sama dengantrue
), tetapi akan lebih baik jika fungsi dikembalikantrue
ataufalse
seperti yang tersirat dengan nama "isOdd".return !!(num % 2)
untuk mendapatkan booleanGunakan
AND
operator bitwise .Jika Anda tidak menginginkan nilai pengembalian string, melainkan nilai boolean, gunakan ini:
sumber
X % Y
!function isEven(n){return !(n & 1);}
.x & 1
Memeriksa 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:
sumber
if (condition) { answer=true; } else { answer=false; }
adalah versi yang tidak perlu bertele - teleanswer = (bool) condition;
. Kurangi fungsi Andafunction 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 sajareturn value%2==0
dan tidak perlu repot dengan persyaratan.value%2===0
sumber
Tidak. Gunakan modulus (%). Ini memberi Anda sisa dari dua angka yang Anda bagi.
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.
sumber
Ini dapat diselesaikan dengan potongan kode kecil:
Semoga ini membantu :)
sumber
Seperti banyak bahasa, Javascript memiliki operator modulus
%
, yang menemukan sisa pembagian. Jika tidak ada sisa setelah pembagian dengan 2, jumlahnya genap:Ini adalah ungkapan yang sangat umum untuk pengujian bahkan untuk bilangan bulat.
sumber
Dengan bitwise, codegolfing:
sumber
Fungsi sederhana yang bisa Anda bagikan. Menggunakan operator modulo
%
:sumber
return !(x % 2);
Gunakan ekstensi saya:
kemudian
== Salah
== Benar
jika Anda tidak yakin apakah itu suatu Angka, ujilah dengan percabangan berikut:
PEMBARUAN:
jika Anda tidak akan menggunakan variabel:
Kinerja:
Ternyata paradigma prosedural lebih baik daripada paradigma OOP. Omong-omong, saya melakukan profiling di FIDDLE ini . Namun, cara OOP masih tercantik.
sumber
Kurangi 2 untuk itu secara rekursif sampai Anda mencapai -1 atau 0 (hanya bekerja untuk bilangan bulat positif) :)
sumber
Anda bisa menggunakan pernyataan for dan conditional untuk menentukan apakah angka atau serangkaian angka ganjil:
Ini akan mencetak setiap nomor ganjil antara 1 dan 5.
sumber
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
sumber
sumber
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:
Sekali lagi, ganti X dengan angka atau variabel.
sumber
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
sumber
Bagaimana dengan ini...
sumber
Inilah yang saya lakukan
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.
sumber
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
).Jika Number.isInteger tersedia, Anda juga dapat menyederhanakan kode ini menjadi:
Catatan: di sini, kami menguji
value % 2 !== 0
bukanvalue % 2 === 1
karena-3 % 2 === -1
. Jika Anda tidak ingin-1
lulus tes ini, Anda mungkin perlu mengubah baris ini.Berikut ini beberapa kasus uji:
sumber
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:
bahkan fungsi:
dan menyebutnya seperti ini:
sumber
Satu liner di ES6 hanya karena bersih.
const isEven = (num) => num % 2 == 0;
sumber
Banyak orang salah paham arti aneh
isOdd("str")
harus salah.Hanya bilangan bulat yang bisa aneh.
isOdd(1.223)
danisOdd(-1.223)
harus salah.Float bukan bilangan bulat.
isOdd(0)
harus salah.Nol adalah bilangan bulat genap ( https://en.wikipedia.org/wiki/Parity_of_zero ).
isOdd(-1)
harus benar.Ini bilangan bulat aneh.
Larutan
JS Fiddle (jika perlu): https://jsfiddle.net/9dzdv593/8/
1-liner
Solusi Javascript 1-liner. Bagi mereka yang tidak peduli tentang keterbacaan.
sumber
(n % 2) !== 0
bukan(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 falsey0
ke dalamfalse
, 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 burukif (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 menutupiNaN
kasus, tapiisOdd(null)
,isOdd(undefined)
,isOdd({x:1})
semua kembalifalse
yang 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, cukupisNaN
centang dan paksa pengguna untuk memanggilnya dengan jenis yang benar. Pemrograman defensif mengerikan. Maka fungsi Anda disederhanakan menjadiisOdd = x => Math.floor(x) === x && x & 1 === 1
- mengembalikan eksplisittrue
ataufalse
nilai tidak diperlukannull
,undefined
dan objek{}
bukan bilangan bulat ganjil, dan karena itu fungsinya kembalifalse
- tidak yakin mengapa Anda menganggap itu kesalahan. TheisNaN
check adalah untuk kinerja (tidak untuk pertahanan), memungkinkan fungsi keluar sebelum waktunya tanpa melakukan pemeriksaan lainnya.Saya akan menerapkan ini untuk mengembalikan boolean:
Ini akan berfungsi pada nomor yang tidak ditandatangani dan ditandatangani. Ketika modulus kembali
-1
atau1
itu akan diterjemahkantrue
.Solusi non-modulus:
sumber
Pendekatan yang lebih fungsional dalam javascript modern:
sumber
dalam ES6:
const isOdd = num => num % 2 == 1;
sumber
sumber
ini berfungsi untuk array:
ini harus keluar: 4,92 1,9,21,41
hanya untuk nomor:
ini akan menghasilkan bahkan ke konsol
sumber