Per aggiungere l'utilizzo di ES2015 di Reflect.ownKeys(obj)
e l'iterazione di sulle proprietà tramite un iteratore.
Per esempio:
let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };
può essere ripetuto da
// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));
Se desideri iterare direttamente sui valori delle chiavi di un oggetto, puoi definire un iterator
, proprio come gli iteratori predefiniti di JavaScipts per stringhe, array, array digitati, Map e Set.
JS tenterà di eseguire l'iterazione tramite la proprietà iteratore predefinita, che deve essere definita come Symbol.iterator
.
Se vuoi essere in grado di iterare su tutti gli oggetti, puoi aggiungerlo come prototipo di Object:
Object.prototype[Symbol.iterator] = function*() {
for(p of Reflect.ownKeys(this)){ yield this[p]; }
}
Ciò consentirebbe di scorrere i valori di un oggetto con un ciclo for ... of, ad esempio:
for(val of obj) { console.log('Value is:' + val ) }
Attenzione : al momento di scrivere questa risposta (giugno 2018) tutti gli altri browser, tranne IE, supportano i generatori e l' for...of
iterazione tramiteSymbol.iterator
if (typeof(obj[propt]) === 'object') {
/ * Fallo di nuovo * /}