Entonces, ¿por qué esto da como resultado 0 y cómo puedo encontrar el tamaño real?¿Cómo encontrar la longitud de la matriz literal?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
Entonces, ¿por qué esto da como resultado 0 y cómo puedo encontrar el tamaño real?¿Cómo encontrar la longitud de la matriz literal?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
Dado que es un objeto, que se compone de propiedades, y tomar la forma de pares clave/valor (conceptualmente similar a una matriz asociativa, o una tabla hash) que tendrá que hacer algo como esto:
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);
demostración: http://jsfiddle.net/gBG34/
básicamente cuando lo hace
array["foo"] = "bar"
que sólo añade un poco más atributos a la matriz, que es un objeto. En javascript, array.foo y array ['foo'] significa lo mismo.
Gracias por aclarar eso. Pero no responde la pregunta? – Mantar
No lo convierte en un objeto. Los arrays * son * objetos, por lo que puede establecer propiedades arbitrarias en ellos. – lonesomeday
Tal vez estoy siendo ingenuo (mi javascript no es eso lo que sea), pero no debería ser algo como esto:
var array = [];
array[0] = "bar";
array[1] = "foo";
document.write(array.length);
El tamaño real es 0 porque usted no puso ningún elementos en el objeto array: esto solo se puede hacer mediante un método (push, etc.) o mediante la asignación de valor a una propiedad indexada (o en el constructor).
Como dije, no se trata de una matriz sino de un objeto. Consulte How to efficiently count the number of keys/properties of an object in JavaScript? para obtener instrucciones sobre cómo contar las propiedades de un objeto (en la pregunta misma).
está configurando una propiedad en la matriz, no dándole un nuevo elemento. Las matrices pueden recibir propiedades arbitrarias, al igual que cualquier otro objeto JavaScript. Por ejemplo:
var foo = [];
foo.bar = 'foobar';
console.log(foo.bar); // outputs 'foobar'
console.log(foo); // outputs [] -- empty array
Para añadir elementos a una matriz, utilice Array.push
:
var foo = [];
foo.push('foobar');
console.log(foo); // outputs ['foobar']
Si quieres pares clave => valor, utilice un objeto en su lugar:
var foo = {};
foo['bar'] = 'foobar';
console.log(foo); // outputs {bar: 'foobar'}
primer lugar , la longitud es 0 porque la cantidad de elementos en array
es 0.
Cuando lo hace esta sintaxis array["foo"] = "bar"
está creando una propiedad llamada foo
que tiene un valor de bar
. La longitud sigue siendo 0, ya que no se ha añadido nada a la matriz, que acaba de establecer nuevas propiedades en la matriz de
versión de trabajo aquí: 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());
en cuenta que array.length = 4
pero props = 7
que es todo de las propiedades y la cantidad de elementos en la matriz.
+100. Gran explicación Gracias. – Radek
Object.keys (Array) .length
ver esto: https://stackoverflow.com/a/13802999/1488217
créditos va a Ian
O también: Object.prototype.size = function() ... Y luego puede usarlo como: var size = array.size() –
... o como una función simple, y simplemente haga ' getSize (var); ' – karim79
No existe una matriz asociativa en JS. Es un objeto y solo una sintaxis alternativa para acceder a sus propiedades. En lugar de 'array [" foo "]', también puede escribir 'array.foo'. Es por eso que la propiedad de longitud no funciona. Establece propiedades en un objeto de matriz y no agrega elementos a una matriz. – DanMan