Articles

iterarea prin obiecte JavaScript-5 tehnici și teste de performanță.

for…in bucla

for…in declarație buclă poate fi folosit pentru a itera peste toate non-simbol, proprietăți enumerabile ale unui obiect.

obiect.chei

Object.keys() metoda returnează o serie de chei obiect. Aceasta creează o matrice care conține proprietățile obiectului. Puteți apoi bucla prin matrice pentru a obține cheile și valorile de care aveți nevoie.

obiect.valori

metodaObject.values() returnează o serie de valori ale obiectelor. Aceasta creează o matrice care conține proprietățile obiectului. Puteți apoi bucla prin matrice pentru a obține valorile de care aveți nevoie.

obiect.getOwnPropertyNames

Object.getOwnPropertyNames() metoda returnează o matrice de toate proprietățile (inclusiv proprietăți non-enumerabile cu excepția celor care folosesc simbol) găsite direct într-un obiect dat. Aceasta creează o matrice care conține proprietățile obiectului. Puteți apoi bucla prin matrice pentru a obține cheile și valorile de care aveți nevoie.

obiect.intrări

Object.entries()metoda returnează o matrice a proprietății enumerabile a unui obiect dat perechi.

comparație de performanță

acum să testăm toate aceste tehnici și să le comparăm pe fiecare în funcție de viteza și performanța lor pentru a determina care este mai rapid.

majoritatea browserelor precum Chrome și Firefox implementează calendarul de înaltă rezoluție înperformance.now(). Metodaperformance.now() returnează unDOMHighResTimeStamp, măsurat în milisecunde.

utilizare

let start = performance.now();// code to be timed...let duration = performance.now() - start;

să începem testarea…

rezultatele testelor

conform testelor noastre, aici sunt rezultatele în ordine crescătoare;

╔═══════════╦════════════════════════════╦═════════════════════════╗
║ Rank ║ Technique ║ Time(ms) ║
╠═══════════╬════════════════════════════╬═════════════════════════╣
║ 1 ║ for...in loop ║ 0.8450000023003668 ms ║
║ 2 ║ Object.keys ║ 1.32499999017 ms ║
║ 3 ║ Object.entries ║ 1.63499999326 ms ║
║ 4 ║ Object.values ║ 2.05499998992 ms ║
║ 5 ║ Object.getOwnPropertyNames ║ 2.12500002817 ms ║
╚═══════════╩════════════════════════════╩═════════════════════════╝

deci, în funcție de aceste rezultate, cel mai rapid mod de a itera prin obiecte JavaScript este for…in buclă. Acum, acest lucru nu înseamnă că celelalte metode sunt nule sau inutile, totul depinde de cazurile de utilizare.

problema cu o buclăfor...in este că iterează prin proprietățile din lanțul prototip. Iterează peste proprietățile obiectului. JavaScript matrice sunt doar un anumit tip de obiect cu unele proprietăți la îndemână care vă ajută să le trateze ca matrice, dar ei încă mai au proprietăți interne obiect și nu înseamnă să repete peste acestea. for...initerează, de asemenea, toate proprietățile enumerabile și nu doar elementele matricei. Acest lucru poate duce, de asemenea, la rezultate neașteptate.

când treceți printr-un obiect cu buclafor...in, trebuie să verificați dacă proprietatea aparține obiectului. Puteți face acest lucru cu hasOwnProperty.

o modalitate mai bună și mai eficientă de a trece prin obiecte în ES6 este de a converti mai întâi obiectul într-o matrice folosindObject.keys()Object.values()Object.getOwnPropertyNames sauObject.entries() . Apoi, bucla prin matrice pentru a obține cheile și valorile.