2012-05-18 17 views

risposta

73

Utilizzare Object.keys() o shim nei browser più vecchi.

In alternativa, tenendo conto vostro caso d'uso, forse questo lo farà ...

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 (chiave) '' La maggior parte –

3

Con un moderno motore JS è possibile utilizzare Object.keys(driversCounter)

46

Una possibilità è usare Object.keys():

Object.keys(driversCounter) 

Funziona bene per i browser moderni (tuttavia, IE supporta solo a partire dalla versione 9).

Per aggiungere il supporto compatibile è possibile copiare il frammento di codice fornito in MDN.

+1

risposta utile qui! – securecurve

17

al ciclo attraverso il "dizionario" (noi lo chiamiamo oggetto in JS), utilizzare un ciclo for in:

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

per i nuovi browser: Object.keys(MY_DICTIONARY) restituirà una serie di chiavi. Altrimenti si consiglia di andare alla vecchia maniera scuola:

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

preferisco la risposta di Joseph per il cosiddetto modo old school –

+0

Incompleto a causa della possibile prototipazione. –

+0

ecco perché quando ho visto la risposta di joseph, mi sono ricordato che ... e invece di modificarlo, ho solo detto di preferire la sua risposta, no? –

1

Come altri hanno detto, si potrebbe uso Object.keys(), ma chi se ne frega browser più vecchi, giusto?

Bene, lo so.

Prova this. array_keys dalle porte PHPJS La comoda funzione di array_keys di PHP può essere utilizzata in JS. A prima vista, utilizza Object.keys se supportato, ma gestisce il caso in cui non è molto semplice. Esso comprende anche filtrare i tasti in base ai valori si potrebbe essere alla ricerca di (opzionale) e un interruttore per se o non usare rigoroso confronto === contro confronto typecasting == (opzionale)

7

Questo funzionerà in tutte le implementazioni JavaScript:

var keys = []; 

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

Come già menzionato prima, è possibile utilizzare Object.keys, ma potrebbe non funzionare nei motori più vecchi. Così si può utilizzare la seguente patch scimmia:

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

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

Un approccio diverso sarebbe quello che utilizzano gli array multidimensionali:

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

e accedere al valore da driverCounter [k] [j], dove j = 0,1 nel caso.
Aggiungere in un elenco a discesa da:

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

Questo primo blocco di codice non è valido. – alex

1

se è possibile utilizzare JQuery poi

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

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

qui segue la risposta:

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

e in questo modo si wouldn' Non preoccuparti se il browser supporta il metodo Object.keys oppure no.

2

uso Object.Keys()

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

Problemi correlati