Quindi, perché questo risultato in 0 e come trovo la dimensione effettiva?Come trovare la lunghezza della matrice letterale?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
Quindi, perché questo risultato in 0 e come trovo la dimensione effettiva?Come trovare la lunghezza della matrice letterale?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
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);
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.
Grazie per la compensazione che fuori. Ma non risponde alla domanda? – Mantar
Non lo converte in un oggetto. Le matrici * sono * oggetti, quindi puoi impostare su di esse proprietà arbitrarie. – lonesomeday
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);
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).
Come detto, non si tratta di un array ma di un oggetto. Vedere How to efficiently count the number of keys/properties of an object in JavaScript? per istruzioni su come contare le proprietà in un oggetto (nella domanda stessa).
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'}
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.
+100. Ottima spiegazione. Grazie. – Radek
Object.keys (Array) .length
vedono questo: https://stackoverflow.com/a/13802999/1488217
crediti va a ian
Oppure: Object.prototype.size = function() ... E quindi lo si può usare come: var size = array.size() –
... o come funzione plain-old, e basta fare ' getSize (var); ' – karim79
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