2009-02-25 10 views
89

C'è un modo per iterare su ogni proprietà di un oggetto utilizzando il framework Prototype JavaScript?Iterating su ogni proprietà di un oggetto in javascript usando Prototype?

Ecco la situazione: sto ottenendo una risposta AJAX in JSON che sembra qualcosa di simile:

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

Se valuto che la risposta JSON a una variabile response, voglio essere in grado di iterare su ogni proprietà nell'oggetto response.barobj per vedere quali indici sono veri e quali sono falsi.

Il prototipo ha sia Object.keys() e Object.values() ma stranamente sembra non avere una semplice funzione Object.each()! Potrei prendere i risultati di Object.keys() e Object.values ​​() e rimandare l'altro mentre eseguo l'iterazione attraverso uno, ma è un tale trucco che sono sicuro che ci sia un modo corretto per farlo!

risposta

42

Devi prima convert your object literal to a Prototype Hash:

// Store your object literal 
var obj = {foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

// Iterate like so. The $H() construct creates a prototype-extended Hash. 
$H(obj).each(function(pair){ 
    alert(pair.key); 
    alert(pair.value); 
}); 
+0

Perfetto! Questo e 'esattamente quello che stavo cercando. – OverloadUT

+57

Sfortunatamente da quando è stata chiusa una domanda simile, una che voleva semplicemente scorrere su un semplice oggetto javascript senza Prototype, ora devo trattare questa risposta come se fosse la stessa della domanda che è stata chiusa a causa della "duplicazione". Quindi, un esempio orribile in quanto costringe l'utente a caricare Prototype. L'utente non ha detto nulla su Prototype, quindi non è utile forzarli a caricare una libreria indesiderata. (ricorda, trattando questo come se fosse davvero un duplicato). Se l'altra domanda non fosse stata chiusa a causa della falsa richiesta di duplicazione, non avrei dovuto votare la risposta. –

+2

Il richiedente non ha menzionato la richiesta di Prototipo (o la domanda è stata modificata?)? Comunque va tutto bene – emurano

0

È necessario eseguire un'iterazione sui tasti e ottenere i valori utilizzando parentesi quadre.

Vedi: How do I enumerate the properties of a javascript object?

EDIT: Ovviamente, questo rende la questione un duplicato.

+0

Tale metodo è fortemente scoraggiato contro nella documentazione Prototype: http://www.prototypejs.org/api/array – OverloadUT

+1

Inoltre, non penso che questo sia un duplicato perché stavo cercando una soluzione nativa Prototype che è ciò che ho ottenuto. L'altra domanda è decente per qualcuno che non vuole che usi un framework, ma questa soluzione è molto più sicura se si utilizza Prototype. – OverloadUT

+1

@OverloadUT: non hai letto abbastanza attentamente: è scoraggiato per iterare sulle proprietà degli array, non sugli oggetti semplici – Christoph

546

Non c'è bisogno di Prototype qui: JavaScript ha for..in loop. Se non siete sicuri che nessuno pasticciato con Object.prototype, controllare hasOwnProperty() così, cioè

for(var prop in obj) { 
    if(obj.hasOwnProperty(prop)) 
     doSomethingWith(obj[prop]); 
} 
+139

Grazie per la risposta effettiva senza imporci di caricare una libreria indesiderata. –

+8

questa non è la risposta giusta. la domanda afferma che il prototipo deve essere usato! libertà di scelta - haha ​​... –

+11

+1 È la risposta giusta al titolo della domanda. –

Problemi correlati