Digamos que você tenha um objeto javascript como este:
var data = { foo: 'bar', baz: 'quux' };
Você pode acessar as propriedades pelo nome da propriedade:
var foo = data.foo;
var baz = data["baz"];
Mas é possível obter esses valores se você não souber o nome das propriedades? A natureza desordenada dessas propriedades torna impossível diferenciá-las?
No meu caso, estou pensando especificamente em uma situação em que uma função precisa aceitar uma série de pares nome-valor, mas os nomes das propriedades podem mudar.
Meu pensamento sobre como fazer isso até agora é passar os nomes das propriedades para a função junto com os dados, mas isso parece um hack. Eu preferiria fazer isso com introspecção, se possível.
fonte
As versões antigas do JavaScript (<ES5) requerem o uso de um
for..in
loop:O ES5 apresenta Object.keys e Array # forEach, o que facilita um pouco:
O ES2017 apresenta
Object.values
eObject.entries
.fonte
fonte
Muitas vezes, você deseja examinar as propriedades específicas de uma instância de um objeto, sem todos os métodos e propriedades de protótipo compartilhados:
fonte
Isso obterá todas as propriedades e seus valores (herdados ou próprios, enumeráveis ou não) em um novo objeto. o objeto original está intocado. Agora, um novo objeto pode ser percorrido usando
fonte
fonte
.hasOwnProperty()
usar quando for para iterar um objeto.hasOwnProperty()
método retorna umboolean
indicando se o objeto tem a propriedade especificada como sua própria propriedade (em vez de herdá-lo) . veja este exemploVocê pode usar Object.keys () , "que retorna uma matriz dos nomes de propriedades enumeráveis de um determinado objeto, na mesma ordem que obtemos com um loop normal".
Você pode usar qualquer objeto no lugar de
stats
:fonte
Object.keys( stats )[key]
não faz sentido, sempre seráundefined
.fonte