/ / Ako vlastne pole funguje v javascripte - javascript, polia, link-list

Ako pole v skutočnosti pracuje v jazyku javascript - javascript, arrays, linked-list

Dúfam, že moja otázka nie je taká hlúpa. Ale zaujímalo by ma, ako vlastne polia fungujú v JavaScripte. Špeciálne získavanie prvku indexom.

Predpokladajme, že mám pole s názvom myFirstArrays prvkami [1,2,3,4]. Ako napíšem myFirstArray [3], ako funguje získanie štvrtého prvku z tohto poľa? Je to slučka? Takže vždy, keď chcem posledný prvok poľa, prechádza celým poľom?

To isté platí pre pridanie prvku do poľa. Nájde sa slučka vždy cez pole, aby sa našiel posledný prvok v poli?

Pýtam sa, pretože som implementoval linkedList do Javascriptu a som zvedavý, či je efektívnejší ako bežné pole.

odpovede:

3 pre odpoveď č. 1

Implementácia polí v Javascripte sa trochu líši od implementácie polí vo väčšine ostatných jazykov.

Pole nie je iba zoznam položiek, ale naopakje asociatívne pole. Položky „sa neukladajú jeden za druhým, namiesto toho sa ukladajú ako samostatné páry kľúč – hodnota. Ak napríklad dáte hodnoty do indexu 3 a 5, pole neobsahuje nedefinované položky na vyplnenie medzier, má iba hodnoty, ktoré sú nastavené.

S týmto kódom:

var a = [];
a[3] = 1;
a[5] = 2;

Údaje, ktoré sú uložené v poli, nevyzerajú takto:

[ undefined, undefined, undefined, 1, undefined, 2 ]

Skôr to vyzerá takto:

{
"3": 1,
"5": 2,
"length": 6
}

Položky v poli sú uložené ako vlastnosti v objekte poľa, jedná sa iba o to, že pole manipuluje s vlastnosťami numerickým kľúčom špeciálnym spôsobom, t. J. Úpravou length majetok v prípade potreby.

Implementácia zbierky párov kľúč - hodnota jevykonáva sa pomocou hashovacej tabuľky (alebo možno niečoho ešte efektívnejšieho, v závislosti od enginu Javascript), takže prístup k položke je blízky operácii O (1), t. j. neprechádza všetky vlastnosti, kým nenájde tú pravú.


1 pre odpoveď č. 2

To, ako sa realizuje prístup k poľu, záleží na samotnom engine JavaScriptu, a preto sa môže líšiť od motora k motoru.

Odhadoval by som, že aj keď sú polia stále blokypamäte vo väčšine motorov. Ak pristupujete k prvku, pole nie je v krúžku. Namiesto toho sa počíta adresa pamäte pre tento konkrétny prvok (memory_offset_of_the_first_element + size_of_element * desired_index) a potom sa dá prvok odtiaľ zhromaždiť. Vkladanie a mazanie je zložitejšie a nákladnejšie. V najhoršom prípade je potrebné skopírovať a upraviť celé pole.

Lamar poskytol dobrý prehľad v Kedy použiť prepojený zoznam cez zoznam polí / polí?.


1 pre odpoveď č. 3

v Javascript existujú štandardné vstavané objekty a jeden z týchto objektov je rad. Pole je globálny objekt na vysokej úrovni a používa sa ako konštruktor polí.

Prvky poľa sú vlastnosti objektu ktoré sú prístupné prostredníctvom zátvorky. V iných jazykoch by ste polia Javascript nazvali ako riedke polia (Ex: Wolfram).