Pertama kali saya bekerja dengan jQuery.inArray()
dan itu bertindak agak aneh.
Jika objek dalam array, itu akan mengembalikan 0, tetapi 0 salah dalam Javascript. Jadi yang berikut ini akan menampilkan: "BUKAN dalam susunan"
var myarray = [];
myarray.push("test");
if(jQuery.inArray("test", myarray)) {
console.log("is in array");
} else {
console.log("is NOT in array");
}
Saya harus mengubah pernyataan if ke:
if(jQuery.inArray("test", myarray)==0)
Tapi ini membuat kode tidak terbaca. Terutama bagi seseorang yang tidak tahu fungsi ini. Mereka akan berharap bahwa jQuery.inArray ("test", myarray) memberikan true ketika "test" ada dalam array.
Jadi pertanyaan saya adalah, mengapa dilakukan seperti ini? Saya benar-benar tidak suka ini. Tapi pasti ada alasan bagus untuk melakukannya seperti itu.
sumber
if jQuery.inArray('test', myarray) isn't -1
$.isInArray = function(test,array) { return $.inArray(test, array) !== -1; };
$.isInArray = function(item, array) { return !!~$.inArray(item, array); };
(Saya akan menyimpan kode samar seperti itu dalam fungsi yang bernama baik untuk menjaga niat tetap jelas :))if( $.inArray(test, array) > -1) { // do stuff }
$.inArray
mengembalikan indeks elemen jika ditemukan atau -1 jika tidak - bukan nilai boolean. Jadi yang benar adalahsumber
Jawabannya berasal dari paragraf pertama dari dokumentasi yang memeriksa apakah hasilnya lebih besar dari -1, bukan apakah itu benar atau salah.
sumber
Cara penggunaan yang benar
inArray(x, arr)
adalah tidak menggunakannya sama sekali , dan sebaliknya menggunakannyaarr.indexOf(x)
.Nama standar resmi juga lebih jelas pada kenyataan bahwa nilai yang dikembalikan adalah indeks sehingga jika elemen yang dilewati adalah yang pertama Anda akan mendapatkan kembali
0
(yang salah dalam Javascript).(Perhatikan bahwa
arr.indexOf(x)
ini tidak didukung di Internet Explorer sampai IE9 , jadi jika Anda perlu untuk mendukung IE8 dan sebelumnya, ini tidak akan bekerja, dan fungsi jQuery adalah alternatif yang lebih baik.)sumber
$.inArray
menggunakan di awal beberapa kode saya harus memperbaiki bug, saya mengeluh. Bagaimanapun, ini harus menjadi jawaban yang diterima.Atau jika Anda ingin mendapatkan bit fancy Anda dapat menggunakan operator bitwise not (~) dan logical not (!) Untuk mengonversi hasil fungsi inArray ke nilai boolean.
sumber
Saya biasanya menggunakan
atau
sumber
if( $.inArray("test", myarray) > -1 )
Metode jQuery inArray () digunakan untuk mencari nilai dalam array dan mengembalikan indeksnya bukan nilai Boolean. Dan jika nilainya tidak ditemukan maka akan mengembalikan -1.
Jadi, untuk memeriksa apakah suatu nilai hadir dalam array, ikuti praktik berikut ini:
Referensi
sumber
Itu
inArray
fungsi mengembalikan indeks dari objek yang disediakan sebagai argumen pertama ke fungsi dalam array disediakan sebagai argumen kedua ke fungsi.Ketika
inArray
kembali0
itu menunjukkan bahwa argumen pertama ditemukan di posisi pertama dari array yang disediakan.Untuk digunakan
inArray
dalam pernyataan if gunakan:inArray
kembali-1
ketika argumen pertama yang diteruskan ke fungsi tidak ditemukan dalam array yang diteruskan sebagai argumen kedua.sumber
alih-alih menggunakan
jQuery.inArray()
Anda juga dapat menggunakanincludes
metode untuk array int:periksa pos resmi di sini
sumber
jQuery.inArray () mengembalikan indeks item dalam array, atau -1 jika item tidak ditemukan. Baca lebih lanjut di sini: jQuery.inArray ()
sumber
Ini akan mengembalikan indeks item dalam array. Jika tidak ditemukan Anda akan mendapatkannya
-1
sumber
Jika kita ingin memeriksa elemen di dalam set elemen yang bisa kita lakukan misalnya:
sumber
Ini berguna untuk memeriksa variabel dinamis. Metode ini mudah dibaca.
sumber
$.inArray()
apakah EXACT SAMA HAL sebagaimyarray.indexOf()
dan mengembalikan indeks item yang Anda periksa array untuk keberadaan. Itu hanya kompatibel dengan versi IE sebelum IE9 sebelumnya. Pilihan terbaik mungkin adalah menggunakanmyarray.includes()
yang mengembalikan nilai true / false boolean. Lihat cuplikan di bawah ini untuk contoh-contoh keluaran dari ketiga metode.sumber
$.inArray
harus menjadi standar emas jika Anda memiliki akses ke perpustakaan jQuery. Jika tidak, JavaScript.indexOf
dengan polyfill untuk IE8 harus digunakan sebagai gantinya. Jauhi barang-barang modern seperti.includes()
.***, periksa dok .
sebagai contoh:
sumber
Untuk beberapa alasan ketika Anda mencoba memeriksa elemen DOM jquery itu tidak akan berfungsi dengan baik. Jadi menulis ulang fungsi akan melakukan trik:
sumber
sumber
Hanya tidak ada yang menggunakan,
$
bukanjQuery
:sumber
$
alih - alihjQuery
.