2012-05-18 16 views

Respuesta

73

Use Object.keys() o shim en navegadores anteriores.

Por otra parte, teniendo en cuenta su caso de uso, tal vez esto lo hará ...

var selectBox, option, prop; 

selectBox = document.getElementById("drivers"); 

for (prop in driversCounter) { 
    option = document.createElement("option"); 
    option.textContent = prop; 
    option.value = driversCounter[prop]; 
    selectBox.add(option); 
} 
+0

'dict.hasOwnProperty (clave)' La mayoría –

3

Con un motor de JS moderna puede utilizar Object.keys(driversCounter)

46

Una opción es el uso de Object.keys():

Object.keys(driversCounter) 

Funciona bien para navegadores modernos (sin embargo, IE lo admite a partir de la versión 9 solamente). Para agregar compatibilidad compatible, puede copiar el fragmento de código provisto en MDN.

+1

respuesta útil aquí! – securecurve

17

a través del bucle de "diccionario" (lo llamamos objeto de JS), utilizar un bucle for in:

for(var key in driversCounter) { 
    if(driversCounter.hasOwnProperty(key)) { 
     //key     = keys, left of the ":" 
     //driversCounter[key] = value, right of the ":" 
    } 
} 
1

para los nuevos navegadores: Object.keys(MY_DICTIONARY) devolverá una matriz de claves. Cosa que usted puede desear ir a la vieja escuela:

var keys = [] 
for(var key in dic) keys.push(key); 
+0

prefiera la respuesta de Joseph para el llamado camino de la vieja escuela –

+0

Incompleto debido a una posible creación de prototipos. –

+0

es por eso que cuando vi la respuesta de Joseph, recordé eso ... y en lugar de editarlo, simplemente le dije que prefería su respuesta, ¿no? –

1

Como han dicho otros, que podrían uso Object.keys(), sino que se preocupa por los navegadores más antiguos, ¿verdad?

Bueno, yo sí.

Probar this. array_keys desde puertos PHPJS La función práctica array_keys de PHP permite su uso en JS. De un vistazo, usa Object.keys si es compatible, pero maneja el caso donde no es muy fácil. Incluso incluye el filtrado de las llaves sobre la base de valores que pueda interesar (opcional) y un conmutador de si debe o no utilizar comparación estricta === frente comparación encasillamiento == (opcional)

7

Esto funcionará en todas las implementaciones de JavaScript:

var keys = []; 

for (var key in driversCounter) { 
    if (driversCounter.hasOwnProperty(key)) { 
     keys.push(key); 
    } 
} 

Al igual que los otros antes mencionados, puede utilizar Object.keys, pero puede que no funcione en motores más antiguos. Por lo tanto se puede utilizar el siguiente parche mono:

if (!Object.keys) { 
    Object.keys = function (object) { 
     var keys = []; 

     for (var key in object) { 
      if (object.hasOwnProperty(key)) { 
       keys.push(key); 
      } 
     } 
    } 
} 
-3

Un enfoque diferente sería utilizando matrices multidimensionales:

var driversCounter = [ 
    ["one", 1], 
    ["two", 2], 
    ["three", 3], 
    ["four", 4], 
    ["five", 5] 
] 

y acceder al valor por driverCounter [k] [j], donde j = 0,1 en el caso.
Añadir en una lista desplegable por:

var dd = document.getElementById('your_dropdown_element'); 
for(i=0;i<driversCounter.length-1;i++) 
{ 
    dd.options.add(opt); 
    opt.text = driversCounter[i][0]; 
    opt.value = driversCounter[i][1]; 
} 
+1

Ese primer bloque de código no es válido. – alex

1

si se puede usar jQuery entonces

var keys = []; 
$.each(driversCounter, function(key, value) { 
    keys.push(key); 
}); 

console.log(JSON.stringify(keys)); 

aquí sigue la respuesta:

["one","two","three","four","five"] 

y de esta manera wouldn' Tengo que preocuparme si el navegador es compatible con el método Object.keys o no.

2

uso Object.Keys()

var driversCounter = { 
 
         "one": 1, 
 
         "two": 2, 
 
         "three": 3, 
 
         "four": 4, 
 
         "five": 5 
 
        } 
 
console.log(Object.keys(driversCounter));

Cuestiones relacionadas