La trimiterea unui array asociativ prin JSON se schimba ordinea elementelor
Ipoteza
Trimitem de pe server, prin AJAX, pe client, un array encodat JSON.
Acesta este un array asociativ de tip dbId => caption. De exemplu:
12 => Afine 32 => Mere 13 => Pere
In JS, in anumite cazuri, acest array va ajunge ordonat dupa cheie, chiar daca initial el avea o alta ordine, ca in exemplu nostru unde era sortat alfabetic :
12 => Afine 13 => Pere 32 => Mere
Cauze (pot fi toate, poate fi numai una) :
- browser-ul – cateodata Chrome si Firefox vor schimba ordinea elementelor (vezi http://stackoverflow.com/questions/5020699/how-do-you-stop-chrome-and-opera-sorting-json-objects-by-index-asc)
- jQuery.each – daca elementele prin care trece each sunt obiecte, atunci ordinea in care se iau nu este garantata (vezi http://stackoverflow.com/questions/25155384/is-the-sort-order-of-jquerys-each-guaranteed)
- js foEach – intotdeauna va face loop dupa index (vezi http://stackoverflow.com/questions/13600922/does-javascript-array-foreach-traverse-elements-in-ascending-order)
Solutia :
Trimite array-urile neasociative (adica cheia sa fie mereu integeri succesivi : 0,1,2,3,….)
Odata ce faci asa, este safe sa folosesti oricare din cele trei metode de mai sus.
Categories: HINTS (tehnice) |
Leave a Reply
[TOP]