Ini akan bekerja untuk menguji apakah suatu nilai berada pada posisi "index" ada atau tidak, atau apakah ada cara yang lebih baik:
if(arrayName[index]==""){
// do stuff
}
Semua array di JavaScript berisi array.panjang elemen, mulai dengan
array[0]sampai
array[array.panjang - 1]. Menurut definisi, elemen array dengan index
akuadalah kata untuk menjadi bagian dari array jika
akuadalah antara
0dan
array.panjang - 1` inklusif.
Artinya, JavaScript array linier, dimulai dengan nol dan akan maksimal, dan array don't memiliki mekanisme untuk tidak termasuk nilai-nilai tertentu atau rentang dari array. Untuk mengetahui apakah nilai yang ada di posisi tertentu index (di mana indeks adalah 0 atau bilangan bulat positif), anda benar-benar hanya menggunakan
if (index < array.length) {
// do stuff
}
Namun, ini adalah ** mungkin bagi beberapa nilai array menjadi null, undefined
, NaN
, Infinity
, 0, atau seluruh host nilai-nilai yang berbeda. Misalnya, jika anda menambahkan nilai array dengan meningkatkan array.panjang
property, setiap nilai-nilai baru akan undefined
.
Untuk menentukan apakah nilai yang diberikan adalah sesuatu yang berarti, atau telah ditetapkan. Yaitu, tidak undefined
, atau nol
:
if (typeof array[index] !== 'undefined') {
atau
if (typeof array[index] !== 'undefined' && array[index] !== null) {
Menariknya, karena JavaScript's perbandingan aturan, contoh terakhir saya dapat dioptimalkan bawah ini:
if (array[index] != null) {
// The == and != operators consider null equal to only null or undefined
}
Hanya menggunakan .suhu udara
tidak aman dan akan menyebabkan kesalahan di beberapa browser. Berikut ini adalah solusi yang lebih baik:
if(array && array.length){
// not empty
} else {
// empty
}
atau, kita dapat menggunakan:
Object.keys(__array__).length
Pendek dan pendekatan universal
Jika anda ingin memeriksa setiap array jika memiliki falsy nilai-nilai (seperti palsu, undefined, null atau string kosong) anda hanya dapat menggunakan setiap() metode seperti ini:
array.every(function(element) {return !!element;}); // returns true or false
Misalnya:
['23', null, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false
['23', '', 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false
['23', true, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns true
Jika anda perlu untuk mendapatkan indeks pertama dari falsy nilai, anda dapat melakukannya seperti ini:
let falsyIndex;
if(!['23', true, 2, null, {key: 'value'}].every(function(element, index) {falsyIndex = index; return !!element;})) {
console.log(falsyIndex);
} // logs 3
Jika anda hanya perlu untuk memeriksa falsy nilai dari sebuah array untuk indeks tertentu anda hanya dapat melakukannya seperti ini:
if (!!array[index]) {
// array[index] is a correct value
}
else {
// array[index] is a falsy value
}
if(typeof arr ==='object' && arr instanceof Array ){
if(!arr.length){
println 'empty'
}else{
printn 'not Empty'
}
}else{
println 'Null'
}
Jika yang anda maksud dengan 'Null' -> unsur-unsurnya adalah null atau sama dengan '' , dalam hal ini : Periksa jika array kosong setelah penyaringan semua 'null' unsur-unsur
if(!arr.clean().length){return 'is null'}
Tentu saja ,Tambahkan Bersih metode sebelumnya :
Array.prototype.clean=function(){return this.filter(function(e){return (typeof e !=='undefined')&&(e!= null)&&(e!='')})}
Itu tergantung pada apa yang anda maksud dengan "kosong".
Ketika anda mencoba untuk mendapatkan nilai properti pada objek yang tidak memiliki properti dengan nama itu, anda akan mendapatkan nilai undefined
.
Yang's apa yang terjadi dengan array jarang: tidak semua indeks antara 0
dan array.panjang-1
ada.
Jadi anda bisa memeriksa apakah array[indeks] === undefined
.
Namun, properti index
bisa eksis dengan undefined
nilai. Jika anda ingin menyaring hal ini, anda dapat menggunakan di
operator atau hasOwnProperty
, seperti yang dijelaskan dalam https://stackoverflow.com/q/135448/1529630
index in array;
array.hasOwnProperty(index);
Jika anda ingin mempertimbangkan sebuah properti yang sudah ada dengan undefined
atau null
nilai tidak ada, anda dapat menggunakan perbandingan array[indeks] == undefined
atau array[indeks] == null
.
Jika anda tahu array tidak jarang, anda bisa membandingkan index
dengan array.panjang
. Tapi untuk amannya, anda mungkin ingin memastikan bahwa index
benar-benar merupakan indeks array, lihat https://stackoverflow.com/q/38163612/1529630
Saya akan merekomendasikan membuat fungsi seperti ini:
function isEmptyEl(array, i) {
return !(array[i]);
}
Anda bisa menyebutnya seperti ini:
if (isEmptyEl(arrayName, indexVal)) {
console.log('arrayName[' + indexVal + '] is empty');
}
Memaksa pengembang untuk mematuhi isEmptyEl antarmuka akan menangkap kesalahan input seperti undefined arrayName atau indexVal variabel.
(Itu's umumnya praktik yang baik untuk program defensif ketika pemrograman Javascript.)
Anda akan mendapatkan kesalahan dilemparkan seperti ini jika arrayName tidak didefinisikan:
Uncaught ReferenceError: arrayName is not defined
at <anonymous>:2:15
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
Hasil yang sama untuk undefined indexVal.
Anda mendapatkan pesan kesalahan jika array atau nilai indeks tidak ada.
Untuk input yang valid, anda'll hanya mendapatkan benar jika arrayName[indexVal] adalah salah satu dari yang berikut:
OK, let's pertama melihat apa yang akan terjadi jika nilai array tidak ada dalam JavaScript, jadi jika kita memiliki sebuah array seperti di bawah ini:
const arr = [1, 2, 3, 4, 5];
dan sekarang kita periksa apakah 6 ada di index 5 atau tidak:
arr[5];
dan kita mendapatkan
undefined
...
Sehingga's pada dasarnya memberikan kita jawabannya, cara terbaik untuk memeriksa jika tidak terdefinisi, jadi sesuatu seperti ini:
if("undefined" === typeof arrayName[index]) {
//array value is not there...
}
It's lebih baik TIDAK melakukan ini dalam kasus ini:
if(!arrayName[index]) {
//Don't check like this..
}
Karena bayangkan kita memiliki array ini:
const arr = [0, 1, 2];
dan kita lakukan:
if(!arr[0]) {
//This get passed, because in JavaScript 0 is falsy
}
Jadi seperti yang anda lihat, bahkan 0 yang ada, itu doesn't mendapatkan diakui, ada beberapa hal lain yang dapat melakukan hal yang sama dan membuat anda aplikasi kereta, jadi hati-hati, saya daftar mereka semua:
undefined
''
Saya pikir ini keputusan yang tepat untuk orang-orang yang lebih memilih deklaratif pemrograman fungsional lebih penting OOP atau prosedural. Jika pertanyaan anda adalah "ada beberapa nilai-nilai dalam? (a truthy atau falsy nilai)" anda dapat menggunakan `.beberapa metode untuk memvalidasi nilai-nilai dalam.
[].beberapa(el => el || !el);
fungsi isEmpty(arr) { ... }
.[].panjang
mengakibatkan 0
yang lebih berbahaya dalam beberapa kasus.
Atau bahkan ini [].panjang > 0
mengatakan "Ini panjangnya lebih besar dari nol?"Lanjutan contoh:
[ ].beberapa(el => el || !el); // false [null].beberapa(el => el || !el); // benar [1, 3].beberapa(el => el || !el); // benar
Aku ingin menunjukkan sesuatu yang beberapa tampaknya telah terjawab: yaitu adalah mungkin untuk memiliki "kosong" array posisi di tengah-tengah array. Pertimbangkan hal berikut:
let arr = [0, 1, 2, 3, 4, 5]
delete arr[3]
console.log(arr) // [0, 1, 2, empty, 4, 5]
console.log(arr[3]) // undefined
Cara alami untuk memeriksa kemudian akan untuk melihat apakah anggota array adalah undefined, saya tidak yakin jika ada cara lain
if (arr[index] === undefined) {
// member does not exist
}
Dengan Lodash, anda dapat melakukan:
if(_.has(req,'documents')){
if (req.documents.length)
_.forEach(req.documents, function(document){
records.push(document);
});
} else {
}
jika(_.memiliki(req,'dokumen'))
adalah untuk memeriksa apakah permintaan kita objek memiliki properti bernama dokumen
dan jika itu yang menopang, berikutnya jika (req.dokumen-dokumen.panjang)
adalah untuk memvalidasi jika tidak array kosong, sehingga barang-barang lain seperti forEach
dapat melanjutkan.
Untuk memeriksa apakah itu tidak pernah ditentukan atau jika itu dihapus:
if(typeof arrayName[index]==="undefined"){
//the index is not in the array
}
juga bekerja dengan array asosiatif dan array di mana anda menghapus beberapa indeks
Untuk memeriksa apakah itu pernah didefinisikan, dihapus ATAU null atau logis nilai kosong (NaN, string kosong, false):
if(typeof arrayName[index]==="undefined"||arrayName[index]){
//the index is not defined or the value an empty value
}
Aku berlari ke dalam masalah ini dengan menggunakan laravel datatables. Aku menyimpan JSON nilai yang disebut properties
dalam log aktivitas dan ingin menunjukkan tombol yang didasarkan pada nilai ini sedang kosong atau tidak.
Nah, datatables adalah menafsirkan ini sebagai array jika itu kosong, dan sebuah objek jika tidak, oleh karena itu, berikut solusi yang bekerja untuk saya:
render: function (data, type, full) {
if (full.properties.length !== 0) {
// do stuff
}
}
Sebuah objek tidak memiliki panjang properti.
Anda dapat menggunakan Loadsh perpustakaan untuk melakukan hal ini lebih efisien, seperti:
jika anda memiliki sebuah array bernama "hewan", misalnya:
var pets = ['dog', undefined, 'cat', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
Untuk memeriksa semua nilai array null atau tidak terdefinisi nilai-nilai:
var pets = ['dog', undefined, 'cat', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Periksa lebih banyak contoh di http://underscorejs.org/