2012-08-23 6 views
8

Ich weiß, dass ein Array in JavaScript nichts anderes als ein Objekt ist. Wenn ich ein Array so definieren:Wie Array-Verhalten zu kopieren?

var array; 
array = [ "a", "b", "c" ]; 

und

Object.keys(array); 

Ich erhalte folgende Array laufen: ["0", "1", "2"]. Die Array-Länge von array ist 3.

Wenn ich hinzufügen, eine Eigenschaft wie:

array["a"] = "d"; 

Object.keys() ist ["0", "1", "2", "a"] Rückkehr, aber Arraylänge von array ist noch 3.

Aber wenn ich eine Immobilie wie das hinzufügen:

array["3"] = "d"; 

die Länge array ist jetzt 4.

Wenn array ist nur ein anderes Objekt, wie kann ich diese Art von Verhalten erreichen, wenn ich mein Objekt von Grund auf wie var myArray = {} starten?

+6

[Lesen Sie diesen klassischen Blog-Post von Kangax] (http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/) - es stellt sich heraus, dass Sie kann nicht tun, was du verlangst. – Pointy

+0

mögliches Duplikat von [Javascript array length incorrect-on-array-of-objects] falsch (http://stackoverflow.com/questions/2528680/javascript-array-length-incorrect-on-array-of-objects) – epascarello

Antwort

1

Die Eigenschaft .length enthält nur Eigenschaften mit numerischen Indizes, insbesondere solche mit ganzzahligen Werten größer oder gleich null.

Wenn Sie sich fragen, wie eine Gesamtzahl von alle Schlüssel aus einem Array zu erhalten oder ein Objekt, dann könnten Sie tun:

Object.keys(array).length 

... da Object.keys() ein Array zurückgibt, die sich haben eine .length Eigenschaft.

+0

P.S. Beachten Sie, dass '.length' tatsächlich _greater_ als' Object.keys (array) .length' sein kann, da (wie von Clyde hervorgehoben) die Länge um eins größer als der höchste Ganzzahl-Index ist, aber JS spärliche Arrays und 'Object.keys erlaubt() 'gibt nur Indizes zurück, die tatsächlich zugewiesen wurden. – nnnnnn

+0

Also ich vermute, dass der Wert von 'Länge' jedes Mal berechnet wird, wenn eine neue Eigenschaft zum Objekt hinzugefügt wird? – Amberlamps

1

Die length Eigenschaft des Arrays ist der Wert des höchsten numerischen Index + 1.

So nach array["3"] = "d"; den höchsten numerischen Index ist 3 somit die Länge zurück 4

Object.keys(array).length sollten Sie die Länge geben.

+0

'array [1000000000] =" x "' funktioniert nicht so. Wo ist die Grenze? – Amberlamps

+0

Probieren Sie 'var array; array = ["a", "b", "c"]; Array [1000000000] = 1; Array.length; ' –

+0

Fügen Sie dem Index eine weitere '0' hinzu und versuchen Sie es erneut. – Amberlamps

Verwandte Themen