Apakah ini akan berfungsi untuk menguji apakah nilai pada posisi "indeks" ada atau tidak, atau apakah ada cara yang lebih baik:
if(arrayName[index]==""){
// do stuff
}
javascript
arrays
Ankur
sumber
sumber
Jawaban:
Secara konseptual, array dalam JavaScript berisi
array.length
elemen, mulaiarray[0]
dari hinggaarray[array.length - 1]
. Elemen array dengan indeksi
didefinisikan sebagai bagian dari array jikai
berada di antara0
danarray.length - 1
inklusif. Jika saya tidak berada dalam kisaran ini, itu tidak ada dalam array.Jadi secara konsep, array adalah linear, dimulai dengan nol dan pergi ke maksimum, tanpa mekanisme untuk memiliki "celah" di dalam rentang itu di mana tidak ada entri. Untuk mengetahui apakah ada nilai pada indeks posisi tertentu (di mana indeks adalah 0 atau bilangan bulat positif), Anda benar-benar hanya menggunakan
Sekarang, di bawah tenda, mesin JavaScript hampir pasti tidak akan mengalokasikan ruang array secara linear dan berdekatan seperti ini, karena tidak masuk akal dalam bahasa yang dinamis dan itu tidak efisien untuk kode tertentu. Mereka mungkin tabel hash atau beberapa campuran strategi, dan rentang array yang tidak ditentukan mungkin tidak dialokasikan memori mereka sendiri. Meskipun demikian, JavaScript bahasa yang ingin menyajikan array
array.length
n sebagai memiliki n anggota dan mereka diberi nama 0 hingga n - 1 , dan apa pun dalam rentang ini adalah bagian dari array.Apa yang Anda mungkin inginkan, bagaimanapun, adalah untuk mengetahui apakah suatu nilai dalam array sebenarnya sesuatu yang didefinisikan - yaitu, bukan
undefined
. Mungkin Anda bahkan ingin tahu apakah itu didefinisikan dan tidaknull
. Dimungkinkan untuk menambahkan anggota ke array tanpa pernah menetapkan nilainya: misalnya, jika Anda menambahkan nilai array dengan meningkatkanarray.length
properti, nilai baru apa pun akan menjadiundefined
.Untuk menentukan apakah nilai yang diberikan adalah sesuatu yang bermakna, atau telah didefinisikan. Itu bukan
undefined
, ataunull
:atau
Menariknya, karena aturan perbandingan JavaScript, contoh terakhir saya dapat dioptimalkan hingga ini:
sumber
length
properti, dalam hal ini dua contoh kemudian lebih tepat.foo !== 'undefined' && foo !== null
dengan hanyafoo != null
0
hinggaarray.length - 1
. Tidak semua nilai ini akan didefinisikan sebagai nilai. Jika Anda menggunakan kata kunci hapus pada anggota array, itu akan membuat anggota itu kembali menjadi tidak terdefinisi, seperti halnya jika Anda memperpanjang array dengan menambah parameter array.lengthnya, nilai-nilai baru akan mulai sebagai tidak terdefinisi. Pada kenyataannya, implementasi Javascript mungkin akan mengoptimalkan penyimpanan array dan beberapa atau semua nilai yang tidak terdefinisi mungkin tidak menempati memori.new Array(1)[0] === undefined
tetapi nilainya kosong.[undefined][0] === undefined
tetapi nilainya ditentukan; array memiliki nilai. Satu-satunya jawaban sempurna adalah menggunakanin
atauhasOwnProperty()
-idx in array
atauarray.hasOwnProperty(idx)
--per jawaban ini: stackoverflow.com/a/39171620/3120446Tidak bisakah kita melakukan ini saja:
sumber
if(arrayName.length) {...
ada bedanya?if(arrayName.length) {...
gagal padanull
[undefined, undefined]
yang merupakan array dengan panjang = 2.Hanya menggunakan
.length
tidak aman dan akan menyebabkan kesalahan di beberapa browser. Inilah solusi yang lebih baik:atau, kita dapat menggunakan:
sumber
sumber
sumber
x == null
hanya akan berlaku untuk null atau undefined, tidak ada yang lain. Demikian juga,x != null
akan berlaku untuk apa pun yang bukan nol atau tidak terdefinisi. Kecuali jika Anda secara khusus perlu mencari yang tidak terdefinisi, hanya bersandar pada kebaikan konversi implisit.Pendekatan pendek dan universal
Jika Anda ingin memeriksa array apa pun jika memiliki nilai falsy (seperti string false, undefined, null, atau kosong) Anda bisa menggunakan setiap metode () seperti ini:
Sebagai contoh:
Jika Anda perlu mendapatkan indeks pertama dari nilai falsy, Anda dapat melakukannya seperti ini:
Jika Anda hanya perlu memeriksa nilai falsy dari array untuk indeks yang diberikan, Anda bisa melakukannya seperti ini:
sumber
Jika Anda maksud dengan 'Null' -> Elemen-elemennya adalah nol atau sama dengan '', dalam hal ini: Periksa apakah array kosong setelah memfilter semua elemen 'null'
Tentu saja, Tambahkan metode Bersihkan sebelum:
sumber
Saya akan merekomendasikan membuat fungsi seperti ini:
Anda bisa menyebutnya seperti ini:
Memaksa pengembang untuk mematuhi antarmuka isEmptyEl akan menangkap kesalahan input seperti variabel arrayName atau indexVal yang tidak ditentukan.
(Ini umumnya praktik yang baik untuk memprogram pertahanan saat pemrograman dalam Javascript.)
Anda akan mendapatkan kesalahan seperti ini jika arrayName tidak didefinisikan:
Hasil serupa untuk indexVal yang tidak ditentukan.
Anda mendapatkan kesalahan jika nilai array atau indeks tidak ada.
Untuk input yang valid, Anda hanya akan mendapatkan true jika arrayName [indexVal] adalah salah satu dari yang berikut:
sumber
Itu tergantung pada apa yang Anda maksud dengan "kosong".
Saat Anda mencoba untuk mendapatkan nilai properti pada objek yang tidak memiliki properti dengan nama itu, Anda akan mendapatkan nilai
undefined
.Itulah yang terjadi dengan array jarang: tidak semua indeks antara
0
danarray.length-1
ada.Jadi Anda bisa memeriksa
array[index] === undefined
.Namun, properti
index
bisa ada dengan suatuundefined
nilai. Jika Anda ingin memfilter kasing ini, Anda dapat menggunakanin
operator atauhasOwnProperty
, seperti dijelaskan dalam Bagaimana cara memeriksa apakah suatu objek memiliki properti di JavaScript?Jika Anda ingin mempertimbangkan properti yang ada dengan
undefined
ataunull
nilainya tidak ada, Anda dapat menggunakan perbandingan longgararray[index] == undefined
atauarray[index] == null
.Jika Anda tahu arraynya tidak jarang, Anda dapat membandingkannya
index
denganarray.length
. Tetapi agar aman, Anda mungkin ingin memastikan bahwa ituindex
benar - benar indeks array, lihat Periksa apakah nama properti adalah indeks arraysumber
OK, pertama mari kita lihat apa yang akan terjadi jika nilai array tidak ada di JavaScript, jadi jika kita memiliki array seperti di bawah ini:
dan sekarang kita periksa apakah 6 ada di indeks 5 atau tidak:
dan kami mendapatkan
undefined
...Jadi itu pada dasarnya memberi kita jawaban, cara terbaik untuk memeriksa apakah tidak terdefinisi, jadi kira-kira seperti ini:
Lebih baik TIDAK melakukan ini dalam hal ini:
Karena bayangkan kita memiliki array ini:
dan kami melakukannya:
Jadi seperti yang Anda lihat, bahkan 0 ada di sana, itu tidak dikenali, ada beberapa hal lain yang dapat melakukan hal yang sama dan membuat Anda buggy aplikasi, jadi hati-hati, saya daftar semuanya:
undefined
''
sumber
Saya ingin menunjukkan sesuatu yang sepertinya terlewatkan oleh beberapa orang: yaitu dimungkinkan untuk memiliki posisi array "kosong" di tengah array Anda. Pertimbangkan yang berikut ini:
Cara alami untuk memeriksa kemudian adalah untuk melihat apakah anggota array tidak terdefinisi, saya tidak yakin apakah ada cara lain
sumber
coba ini jika array [indeks] adalah nol
sumber
Dengan Lodash, Anda dapat melakukan:
if(_.has(req,'documents'))
adalah untuk memeriksa apakah objek permintaan kami memiliki properti bernamadocuments
dan jika memiliki prop itu, selanjutnyaif (req.documents.length)
adalah memvalidasi jika itu bukan array kosong, sehingga barang-barang lain sepertiforEach
dapat diproses.sumber
Untuk memeriksa apakah belum pernah ditentukan atau apakah sudah dihapus:
juga bekerja dengan array asosiatif dan array tempat Anda menghapus beberapa indeks
Untuk memeriksa apakah itu tidak pernah didefinisikan, telah dihapus ATAU adalah nilai kosong nol atau logis (NaN, string kosong, salah):
sumber
Saya mengalami masalah ini menggunakan datarables laravel. Saya menyimpan nilai JSON yang disebut
properties
dalam log aktivitas dan ingin menunjukkan tombol berdasarkan nilai ini kosong atau tidak.Nah, datatables menafsirkan ini sebagai array jika itu kosong, dan objek jika bukan, oleh karena itu, solusi berikut ini bekerja untuk saya:
Objek tidak memiliki properti panjang.
sumber
Saya pikir keputusan ini sesuai untuk orang-orang yang lebih suka pemrograman fungsional deklaratif daripada OOP imperatif atau prosedural. Jika pertanyaan Anda adalah " Apakah ada beberapa nilai di dalam? (Nilai true atau falsy)" Anda dapat menggunakan
.some
metode untuk memvalidasi nilai-nilai di dalamnya.function isEmpty(arr) { ... }
.[].length
menghasilkan0
yang berbahaya dalam beberapa kasus.[].length > 0
pepatah ini "Apakah panjangnya lebih besar dari nol?"Contoh lanjutan:
sumber
Anda dapat menggunakan perpustakaan Loadsh untuk melakukan ini dengan lebih efisien, seperti:
jika Anda memiliki larik bernama "hewan peliharaan", misalnya:
Untuk memeriksa semua nilai array untuk nilai null atau tidak terdefinisi:
Lihat lebih banyak contoh di http://underscorejs.org/
sumber
fn(){}
adalah kesalahan sintaks, dan tidak jelas sama sekali bagaimana ini membantu memeriksa apakah item array ada pada indeks tertentu atau tidak.