2011-01-07 14 views

risposta

6

Trattandosi di un oggetto, che è composto di proprietà, e sotto forma di coppie chiave/valore (concettualmente simile ad un array associativo, o una tabella hash) si dovrà fare qualcosa di simile:

Object.size = function(obj) { 
    var size = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) size++; 
    } 
    return size; 
}; 

var array = []; 
array["foo"] = "bar"; 
array["bar"] = "foo"; 

var size = Object.size(array); 

Demo: http://jsfiddle.net/gBG34/

+1

Oppure: Object.prototype.size = function() ... E quindi lo si può usare come: var size = array.size() –

+0

... o come funzione plain-old, e basta fare ' getSize (var); ' – karim79

+3

Non c'è niente come un array associativo in JS. È un oggetto e solo una sintassi alternativa per accedere alle sue proprietà. Invece di 'array [" foo "]' potresti anche scrivere 'array.foo'. Ecco perché la proprietà della lunghezza non funziona. Sta impostando le proprietà su un oggetto array e non aggiungendo elementi a un array. – DanMan

1

fondamentalmente quando si fanno

array["foo"] = "bar"

aggiunge solo alcuni più attributi nella matrice, che è un oggetto. In javascript, array.foo e array ['foo'] indicano lo stesso.

+0

Grazie per la compensazione che fuori. Ma non risponde alla domanda? – Mantar

+1

Non lo converte in un oggetto. Le matrici * sono * oggetti, quindi puoi impostare su di esse proprietà arbitrarie. – lonesomeday

0

Forse sono ingenuo (il mio javascript non è quello che potrebbe essere), ma non dovrebbe essere qualcosa di simile:

var array = []; 
array[0] = "bar"; 
array[1] = "foo"; 
document.write(array.length); 
0

La dimensione reale è 0 perché non hai messo qualsiasi elementi in oggetto array - questo può essere fatto solo con un metodo (push, ecc.) o con l'assegnazione di un valore a una proprietà indicizzata (o al costruttore).

4

si sta impostando una proprietà sulla matrice, non dare un nuovo elemento. Le matrici possono ricevere proprietà arbitrarie, proprio come qualsiasi altro oggetto Javascript. Per esempio:

var foo = []; 
foo.bar = 'foobar'; 
console.log(foo.bar); // outputs 'foobar' 
console.log(foo); // outputs [] -- empty array 

Per aggiungere elementi ad un array, utilizzare Array.push:

var foo = []; 
foo.push('foobar'); 
console.log(foo); // outputs ['foobar'] 

Se volete coppie chiave => valore, utilizzare un oggetto anziché:

var foo = {}; 
foo['bar'] = 'foobar'; 
console.log(foo); // outputs {bar: 'foobar'} 
7

Prima di tutto , la lunghezza è 0 perché il numero di elementi in array è 0.

Quando si esegue questa sintassi array["foo"] = "bar" si sta creando una proprietà denominata foo che ha un valore di bar. La lunghezza è ancora 0 poiché non l'ha aggiunto nulla alla Array, appena hai impostato nuove proprietà sul Array

versione Lavorare qui: http://jsfiddle.net/VyjJD/3/

var array = []; 

array["foo"] = "bar"; 
array["bar"] = "foo"; 
array.bin = function() { return "bin"; }; 

array[0] = "bar"; 
array[1] = "foo"; 
array[2] = "bin"; 
array[3] = "bat"; 

var props = 0; 

for (key in array) 
    props++; 

document.write(array.length + "<br />" 
      + props + "<br />" 
      + (array.foo == array["foo"]) + "<br />" 
      + array.bar + "<br />" 
      + array.bin()); 

noti che array.length = 4 ma props = 7 che è tutto di le proprietà e il numero di elementi nella matrice.

+0

+100. Ottima spiegazione. Grazie. – Radek

Problemi correlati