2011-08-11 23 views
13

¿Hay alguna otra forma (más bonita) de inicializar esta matriz de Javascript?Inicializando una matriz de javascript

var counter = []; 
    counter["A"] = 0; 
    counter["B"] = 0; 
    counter["C"] = 0; 
    counter["D"] = 0; 
    counter["E"] = 0; 
    counter["F"] = 0; 
    counter["G"] = 0; 

Respuesta

17

A. eso no funciona, o al menos no de la manera que usted esperaría que lo haga. Inicializó una matriz cuando lo que probablemente está buscando es un hash. counter todavía devolverá [] y tendrá una longitud de 0 a menos que cambie la primera línea a counter = {};. Las propiedades existirán, pero es un uso confuso de [] almacenar pares clave-valor.

B:

var counter = {A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0}; 
+0

-1 porque casi todo lo que se ha dicho que está mal. Sí "funciona", las propiedades están asignadas. Por "el contador aún retornará 0", presumiblemente quiere decir 'counter.toString()', pero eso devolverá una cadena vacía (por EMCA-262 §15.4.4.2 ya que * counter * no tiene propiedades numéricas). Si * counter * se inicializa como un objeto, entonces 'counter.toString()' no devolverá "0", devolverá '[object Object]' según ECMA-262 §15.2.4.2. – RobG

+1

En realidad era más tonto: ejecutar su código en la consola me dio '0' porque la última línea era' contador ["G"] = 0; '. Me refería a la salida de la consola, en cualquier caso. Tiene razón acerca de poder asignar casi cualquier cosa como una propiedad a un objeto, por supuesto, así que reformulé esa porción para señalar la conveniencia de usar '{}' sobre '[]' como una matriz asociativa, si no fuera por otra razón que sorpresa menor. – brymck

13

Usar un objeto literal en lugar de una matriz, como esto:

var counter = {A:0,B:0,C:0}; // and so on 

A continuación, acceda a las propiedades con la notación de puntos:

counter.A; // 0 

... o la notación del corchete:

counter['A']; // 0 

Principalmente utilizará Arrays para propiedades numéricas, aunque es posible agregar propiedades no numéricas como era.

+1

+1 para literales de objeto ... no sabía nada de eso; muy genial –

1
var counter={A:0,B:0,C:0,D:0,E:0,F:0,G:0}; 
1

Tendría más sentido utilizar un objeto para esto:

var counter = { 
     A: 0, 
     B: 0, 
     C: 0, 
     D: 0, 
     E: 0, 
     F: 0, 
     G: 0 
    }; 
Cuestiones relacionadas