Para adicionar o uso de ES2015 de Reflect.ownKeys(obj)
e também iterar sobre as propriedades por meio de um iterador.
Por exemplo:
let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };
pode ser iterado por
// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));
Se você deseja iterar diretamente sobre os valores das chaves de um objeto, pode definir um iterator
, assim como os iteradores padrão do JavaScipts para strings, matrizes, matrizes digitadas, Map e Set.
JS tentará iterar através da propriedade padrão do iterador, que deve ser definida como Symbol.iterator
.
Se você deseja iterar sobre todos os objetos, pode adicioná-lo como um protótipo de Object:
Object.prototype[Symbol.iterator] = function*() {
for(p of Reflect.ownKeys(this)){ yield this[p]; }
}
Isso permitiria que você iterasse sobre os valores de um objeto com um loop for ... of, por exemplo:
for(val of obj) { console.log('Value is:' + val ) }
Cuidado : ao escrever esta resposta (junho de 2018), todos os outros navegadores, exceto o IE, suportam geradores e for...of
iteração viaSymbol.iterator
if (typeof(obj[propt]) === 'object') {
/ * Faça isso de novo * /}