Mai mult
Cum pot verifica în JavaScript dacă există o valoare la un anumit indice matrice?
Va acest lucru pentru a testa dacă o valoare la poziția "index" nu există, sau există o modalitate mai bună:
if(arrayName[index]==""){
// do stuff
}
513
17
Toate tablouri în JavaScript conțin
matrice.lungime
elemente, începând cu matrice[0]până
array[matrice.length - 1]. Prin definiție, o matrice, elementul cu indicele " i "este declarat a fi o parte din matrice dacă" eu "este între
0" și " matrice.lungime - 1` inclusiv.Asta este, JavaScript vectorii sunt liniar, începând cu zero și de a merge la un maxim, și tablouri don't au un mecanism de excludere a anumitor valori sau intervale de matrice. Pentru a afla dacă există o valoare, la o anumită poziție index (în cazul în care indicele este 0 sau un număr întreg pozitiv), ai folosi
Cu toate acestea, este posibil ca unele matrice de valori să fie null,
nedefinit
, "NaN", "Infinity", 0, sau o întreagă serie de valori diferite. De exemplu, dacă adăugați matrice de valori prin creșterea `matrice.lungimea de proprietate, noile valori vor fi "nedefinit".Pentru a determina dacă o anumită valoare este ceva semnificativ, sau a fost definit. Asta este, nu
nedefinit
, saunull
:sau
Interesant, pentru că de JavaScript's comparație reguli, ultimul meu exemplu poate fi optimizat reduce la asta:
Poate't ne-am face acest lucru:
Folosind doar
.lungime
nu este sigur și va provoca o eroare în unele browsere. Aici este o soluție mai bună:sau, putem folosi:
Scurt și abordare universală
Dacă doriți să verificați orice matrice dacă are falsy valori (cum ar fi false, nedefinit, nul sau gol siruri de caractere) puteți folosi doar fiecare() metoda de genul asta:
De exemplu:
Dacă aveți nevoie pentru a obține un indice de falsy valoare, o poti face astfel:
Dacă aveți nevoie doar pentru a verifica un falsy valoare de o matrice pentru un anumit index puteți face doar ca aceasta:
Dacă vrei să spui prin 'Nul' -> elementele Sale sunt nule sau este egal cu '' , în acest caz : Verificați dacă matricea este goală după filtrare toate 'nul' elemente
Desigur ,se Adaugă Curat metoda înainte :
Aceasta depinde de ceea ce vrei să spui cu "gol".
Când încercarea de a obține valoarea unei proprietăți a unui obiect care nu are nici o proprietate cu numele asta, vei primi valoarea "nedefinit".
Ca's ce se întâmplă cu tablouri rare: nu toate indici între
0 " și " matrice.lungime-1
exista.Deci, ai putea verifica dacă
array[index] === nedefinit
.Cu toate acestea, proprietatea "index" ar putea exista un "nedefinit" valoare. Dacă doriți pentru a filtra acest caz, puteți folosi " în "operator" sau " hasOwnProperty`, așa cum este descris în https://stackoverflow.com/q/135448/1529630
Dacă doriți ia în considerare o proprietate imobiliară existentă cu un "nedefinit" sau
null
valoare nu există, puteți utiliza liber comparațiearray[index] == nedefinit " sau " matrice[index] == null
.Dacă știi matrice nu este rară, ai putea compara
index " cu " matrice.lungime
. Dar pentru a fi în siguranță, poate doriți să se asigure că "index" este într-adevăr o serie de index, a se vedea https://stackoverflow.com/q/38163612/1529630Mi-ar recomanda crearea unei funcții de genul asta:
Ai putea spune ca aceasta:
Obligă pe producător să adere la isEmptyEl interfață va prinde erori de intrare, cum ar fi un nedefinit arrayName sau indexVal variabile.
(It's, în general, bună practică pentru programul defensiv atunci când programare în Javascript.)
V-ar obține o eroare aruncat așa, dacă arrayName nu a fost definit:
Rezultate similare pentru un nedefinit indexVal.
Veți obține o eroare în cazul în matrice sau valorile indicelui nu există.
De intrare valabil, te'll obține doar o adevărată dacă arrayName[indexVal] este oricare din următoarele:
OK să's vedem mai întâi ce s-ar întâmpla dacă o matrice valoarea nu există în JavaScript, deci, dacă avem o matrice de genul de mai jos:
și acum vom verifica dacă 6 este acolo, la index 5 sau nu:
și vom obține "nedefinit"...
Așa că's, practic, să ne dea răspunsul, cel mai bun mod de pentru a verifica dacă nedefinit, ceva de genul asta:
L's mai bine NU a face acest lucru în acest caz:
Pentru că ne imaginăm că avem această matrice:
și vom face:
Deci, după cum vedeți, chiar și 0 este acolo, nu't recunoscut, există alte câteva lucruri care pot face același lucru și face aplicarea buggy, astfel încât să fie atent, am lista-le pe toate în jos:
''
Cred că această decizie este potrivit pentru cei care prefera declarativ de programare funcționale de-a lungul imperativ OOP sau procedurale. Dacă întrebarea dvs. este "există unele valori în interiorul? (o sinceră sau o falsy valoare)" puteți utiliza `.unele metoda de a valida valorile interior.
[].unele(el => el || !el);
[].lungime
rezultate la " 0 " care este periculos în unele cazuri.[].lungime > 0
spun "Este lungimea mai mare decât zero?"Avansate exemple:
[ ].unele(el => el || !el); // false [nul].unele(el => el || !el); // true [1, 3].unele(el => el || !el); // true
Aș dori să subliniez ceva, câteva par să fi ratat: și anume că este posibil să aibă un "gol" matrice poziția în mijlocul de matrice. Luați în considerare următoarele:
Modul natural de a verifica ar fi atunci să văd dacă vectorul membru este nedefinit, nu sunt sigur dacă există și alte modalități de
încercați acest lucru dacă array[index] este nul
Cu Lodash, puteți face:
dacă(_.a(req,'documente'))
este de a verifica dacă cererea noastră obiect are o proprietate numită "acte" și dacă are cardanic, următoarea `dacă (req.documente.lungime) este de a valida dacă nu este un array gol, astfel încât alte umpluturi de genul "forEach" pot fi procedat.Pentru a verifica dacă acesta nu a fost niciodată definit sau dacă acesta a fost șters:
de asemenea, funcționează cu tablouri asociative și tablouri în cazul în care ați șters unele index
Pentru a verifica dacă acesta nu a fost niciodată definit, a fost șters SAU este null sau logice valoare gol (NaN, șir gol, false):
Am întâlnit această problemă folosind laravel datatables. Am fost stocarea unui JSON valoare numită "proprietăți" într-un jurnal de activitate și a vrut să arate un buton pe baza acestei valori fiind gol sau nu.
Ei bine, datatables a fost de a interpreta acest lucru ca o matrice, dacă a fost gol, și un obiect dacă acesta nu a fost, prin urmare, următoarea soluție a lucrat pentru mine:
Un obiect nu are o lungime de proprietate.
Puteți utiliza Loadsh bibliotecă pentru a face acest lucru mai eficient, cum ar fi:
dacă aveți o matrice numit "animale de companie", de exemplu:
Pentru a verifica toate matrice de valori de null sau valori nedefinite:
Verifica mai multe exemple în http://underscorejs.org/