2011-01-07 8 views

Respuesta

6

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/

+1

O también: Object.prototype.size = function() ... Y luego puede usarlo como: var size = array.size() –

+0

... o como una función simple, y simplemente haga ' getSize (var); ' – karim79

+3

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

1

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.

+0

Gracias por aclarar eso. Pero no responde la pregunta? – Mantar

+1

No lo convierte en un objeto. Los arrays * son * objetos, por lo que puede establecer propiedades arbitrarias en ellos. – lonesomeday

0

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); 
0

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).

4

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'} 
7

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.

+0

+100. Gran explicación Gracias. – Radek

Cuestiones relacionadas