Articles

Iterating gennem JavaScript Objects – 5 teknikker og Performance Tests.

for…in loop

den for…in loop erklæring kan bruges til at gentage over alle ikke-Symbol, enumerable egenskaber af et objekt.

objekt.nøgler

Object.keys() metode returnerer en række Objekttaster. Dette skaber et array, der indeholder objektets egenskaber. Du kan derefter løbe gennem arrayet for at få de nøgler og værdier, du har brug for.

objekt.værdier

Object.values() metode returnerer en række objekter værdier. Dette skaber et array, der indeholder objektets egenskaber. Du kan derefter løbe gennem arrayet for at få de værdier, du har brug for.

objekt.

Object.getOwnPropertyNames() -metoden returnerer et array af alle egenskaber (inklusive ikke-tællelige egenskaber undtagen dem, der bruger Symbol), Der findes direkte i et givet objekt. Dette skaber et array, der indeholder objektets egenskaber. Du kan derefter løbe gennem arrayet for at få de nøgler og værdier, du har brug for.

objekt.poster

Object.entries() metode returnerer et array af et givet objekts egen optællelige egenskab par.

Ydelsessammenligning

lad os nu teste alle disse teknikker og sammenligne hver enkelt baseret på deres hastighed og ydeevne for at bestemme, hvilken der er hurtigere.i performance.now(). Metodenperformance.now() returnerer enDOMHighResTimeStamp, målt i millisekunder.

anvendelse

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

lad os begynde at teste…

testresultater

ifølge vores test er her resultaterne i stigende rækkefølge;

╔═══════════╦════════════════════════════╦═════════════════════════╗
║ 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 ║
╚═══════════╩════════════════════════════╩═════════════════════════╝

så ifølge disse resultater er den hurtigste måde at gentage gennem JavaScript-objekter på for…in loop. Nu betyder det ikke, at de andre metoder er ugyldige eller ubrugelige, det hele afhænger af brugssager.

problemet med enfor...in loop er, at det gentager gennem Egenskaber i Prototypekæden. Det gentager over objektegenskaber. Javascript-arrays er bare en bestemt slags objekt med nogle praktiske egenskaber, der hjælper dig med at behandle dem som arrays, men de har stadig interne objektegenskaber, og du mener ikke at gentage over disse. for...ingentager også over alle enumerable egenskaber og ikke kun arrayens elementer. Dette kan også føre til uventede resultater.

når du løber gennem et objekt med for...in loop, skal du kontrollere, om ejendommen tilhører objektet. Du kan gøre dette med hasOwnProperty.

en bedre og mere effektiv måde at sløjfe gennem objekter i ES6 er først at konvertere objektet til et array ved hjælp afObject.keys()Object.values()Object.getOwnPropertyNames ellerObject.entries() . Derefter løber du gennem arrayet for at få nøglerne og værdierne.