2012-08-23 12 views
8

So che un array in JavaScript non è altro che un oggetto. Quando mi definisco una matrice simile:Come copiare il comportamento dell'array?

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

ed eseguire

Object.keys(array); 

ottengo seguente array: ["0", "1", "2"]. La lunghezza dell'array di array è 3.

quando aggiungo una proprietà come:

array["a"] = "d"; 

Object.keys() sta tornando ["0", "1", "2", "a"], ma la lunghezza gamma di array è ancora 3.

Ma quando aggiungo una proprietà del genere:

array["3"] = "d"; 

la lunghezza del array è ora 4.

Se array è solo un altro oggetto, come posso ottenere questo tipo di comportamento quando avvio il mio oggetto da zero come var myArray = {}?

+6

[Leggi questo post del blog classico di Kangax] (http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/) - si scopre che non posso fare quello che stai chiedendo – Pointy

+0

possibile duplicato di [lunghezza dell'array Javascript errata su array di oggetti] (http://stackoverflow.com/questions/2528680/javascript-array-length-incorrect-on-array-of-objects) – epascarello

risposta

1

La proprietà .length include solo proprietà con indici numerici, in particolare quelli con valori interi maggiori o uguali a zero.

Se stai chiedendo come ottenere un conteggio totale di tutte le le chiavi da un array o un oggetto, allora si potrebbe fare:

Object.keys(array).length 

... dal Object.keys() restituisce un array che avrà per sé una proprietà .length.

+0

P.S. Si noti che '.length' potrebbe essere in realtà _greater_ di' Object.keys (array) .length' perché (come sottolineato da Clyde) la lunghezza è maggiore di un indice intero più alto, ma JS consente matrici sparse e 'Object.keys() 'restituisce solo gli indici che sono stati effettivamente assegnati. – nnnnnn

+0

Quindi immagino che il valore di 'length' sia calcolato ogni volta che una nuova proprietà viene aggiunta all'oggetto? – Amberlamps

1

La length struttura della matrice è il valore più alto indice numerico + 1.

Così dopo array["3"] = "d"; l'indice numerico massima è 3 quindi la lunghezza restituisce 4

Object.keys(array).length dovrebbe dare la lunghezza.

+0

'array [1000000000] =" x "' non funziona in questo modo. Dov'è il limite? – Amberlamps

+0

Prova 'var array; array = ["a", "b", "c"]; array [1000000000] = 1; array.lunghezza; ' –

+0

Aggiungi un altro' 0' all'indice e riprova per favore. – Amberlamps