JavaScript - tömb átalakítása json-re
Sziasztok.
Az egyik blogmark alatt MadBence küldött be egy linket.
A jsperf.com-ot. Eléggé érdekes egy oldal, szerintem vitatható a pontossága. De a lényeg, hogy az egyik feladatom közepette nagy mennyiségű tömböt alakítok json-re.
A lényeg, az hogy van egy tömb amiben vannak elemek és azt kell megváltoztatni úgy, hogy az ID legyen a tömb indexe.Két úton indultam el. Az egyik, hogy for-al végig megyek és átmásolom. Illetve eszembe jutott egy másik. Az, hogy shift-elem. (Az előző tömb már úgy sem fog kelleni)
Nos ennek okán gyorsan össze is dobtam egy benchmark-ot:
http://jsperf.com/transform-array-by-janez/2
Kezdetben fura volt, hogy a shift-es mennyivel gyorsabb 5000 elemre. Így megcsináltam kezdve 1000-től 100 000-ig (különböző léptékekben).
Az eredmény: https://docs.google.com/spreadsheet/ccc?key=0As3XcbDM6ADadGdtNS1nSkhrVjdiazdlQjUzRGNKd1E#gid=0
(másik munkalapon a Firefox)
Nektek mi a véleményetek?
Szerk.: Már éjjel van és a pop-ot kihagytam :S
Bár úgy néz ki ez teljesít a legjobban.
Ekkora különbség lenne a két böngésző között.
■ Az egyik blogmark alatt MadBence küldött be egy linket.
A jsperf.com-ot. Eléggé érdekes egy oldal, szerintem vitatható a pontossága. De a lényeg, hogy az egyik feladatom közepette nagy mennyiségű tömböt alakítok json-re.
A lényeg, az hogy van egy tömb amiben vannak elemek és azt kell megváltoztatni úgy, hogy az ID legyen a tömb indexe.
// ezt
[
{ id: 'id1', ...},
{ id: 'id2', ...},
...
]
// erre
{
'id1': { ... },
'id2': { ...}
...
}
Nos ennek okán gyorsan össze is dobtam egy benchmark-ot:
http://jsperf.com/transform-array-by-janez/2
Kezdetben fura volt, hogy a shift-es mennyivel gyorsabb 5000 elemre. Így megcsináltam kezdve 1000-től 100 000-ig (különböző léptékekben).
Az eredmény: https://docs.google.com/spreadsheet/ccc?key=0As3XcbDM6ADadGdtNS1nSkhrVjdiazdlQjUzRGNKd1E#gid=0
(másik munkalapon a Firefox)
Nektek mi a véleményetek?
Szerk.: Már éjjel van és a pop-ot kihagytam :S
Bár úgy néz ki ez teljesít a legjobban.
20 000 elemre (Chrome 28) ops/sec
hagyományos: 85.96
shift: 21 324 515
pop: 23 627 751
140 000 elemre a
hagyományos: 12.43
shift: 0.07
pop: 13.28
20 000 elemre (Firefox 22)
hagyományos: 82.28
shift: 4.25
pop: 32 667 773
hagyományos: 85.96
shift: 21 324 515
pop: 23 627 751
140 000 elemre a
hagyományos: 12.43
shift: 0.07
pop: 13.28
20 000 elemre (Firefox 22)
hagyományos: 82.28
shift: 4.25
pop: 32 667 773
Ekkora különbség lenne a két böngésző között.
Így elsőre annyit tennék
Hát én sem értem, hogy minek
Azért van szükségem az
Azaz van egy tömb [elem1,elem2, elem3]. Minden elem a tömbben egy JSON dokumentum mongodb-ből. Itt a tömbben az eredeti indexek számok.
Nekem arra van szükségem, hogy a mongo id alapján rátudjak mutatni 1 adott elemre. Ehhez át kell alakítanom. Példában ezért nem számot raktam ki indexnek.
Köszönöm a válaszod, de
Köszönöm a válaszod, de tisztában vagyok vele.
Lehet, hogy a címem egy kicsit félre érthető. A tömb alatt a számmal 0-tól indexelt hagyományos tömbre céloztam, illetve ennek átalakítására asszociatív tömbre. (JSON-re)
Attól tartok, amit te
Kíváncsivá tettél.Attól
Én így hívom a JavaScript-ben azon objektumaimat amik a "var a = {};" formával hozok létre. Mellesleg több nyelven is keresztül haladnak ilyen formában.
Akkor elárulod mit tudok rosszul?
Szerk: Eközben már sejtem, hogy mire gondolsz.
Az JSON szabványára, mint dupla idézőjelekre a kulcsoknál?
JSON = JavaScript Object Notation
(Oké, ez nem teljesen igaz, de foglalkozzon ezzel az, akinek két anyja van...)
A {} az úgynevezett "object
A JSON pedig egy erre a két Javascriptes shorthand jelölésre épülő adatátviteli formátum. A JSON-ban nem feltétlenül fogsz találni {} jeleket, ez például érvényes JSON: [1, true, null]. A JSON előnye, hogy egy az egyben érvényes Javascript kód is.
Siettem, ránéztem válaszolni
Köszönöm az információkat.
Azzal tisztában voltam, hogy adatátviteli formátum. Az is megvolt, hogy lehet, csak tömb. Ahogy írtad is vissza fele kompatibilitás miatt nekem ráragadt a neve. :)
Igazatok van, hogy rossz néven hivatkozok a rossz helyen.
Ezek alapján a példában az érkező adat az "JSON" volt, továbbiakban is JSON szándékoztam tovább küldeni. De ha így nézzük a transzformálás maga még nem az.
Köszönöm az észrevételeket.
A különbség
Persze az eltávolításnak is van költsége, de az lényegében csak egyetlen írással több. A memória menedzselése pedig általában aszinkron módon történik.
A böngészőfüggő adatokból arra gondolok, hogy NAGY tömbök esetén a Chrome átvált valódi indexelt tömbként való tárolásra, ahol természetesen az index alapján történő lookup a gyorsabb (és az első elem leemelési költsége nagy).
A FF alapból is tömbbel dogozhat.