HOWTO · JavaScript
Obtenha a chave de um objeto JavaScript
Este tutorial detalha como obter a chave de um objeto em javascript.
Nesta página
Use Object.keys(obj) para obter um array com os nomes das propriedades próprias enumeráveis de tipo string de um objeto. Use Object.entries(obj) quando cada chave precisar continuar associada ao respectivo valor. Ambos os métodos deixam o objeto inalterado. Para um loop que também possa percorrer propriedades enumeráveis herdadas, use for...in e filtre as propriedades próprias quando a tarefa exigir isso.
Obtenha as chaves de um objeto com Object.keys()
Object.keys() retorna um array de chaves próprias enumeráveis de tipo string. É útil quando os nomes das propriedades não são conhecidos antecipadamente, por exemplo, ao processar um registro retornado por uma API. O array retornado contém apenas os nomes; para ler um valor, use obj[key]. Se o objeto não tiver propriedades próprias enumeráveis de tipo string, o resultado será um array vazio. Propriedades de símbolo não são incluídas.
A ordem das propriedades é definida, mas nem sempre corresponde à ordem em que as chaves foram escritas. As chaves que são índices de array (representações canônicas de índices inteiros de 0 a 4294967294) aparecem primeiro, em ordem numérica crescente. As outras chaves de tipo string vêm depois, na ordem em que as propriedades foram criadas. Uma string como "01" não é um índice de array e, por isso, fica junto das demais chaves de tipo string. Arrays seguem a mesma regra: Object.keys() retorna como strings os índices presentes e enumeráveis; não retorna os valores do array.
Execute este exemplo:
const record = { 4: 'pear', 2: 'mango', name: 'fruit', '01': 'label' };
const keys = Object.keys(record);
console.log(keys);
console.log(record[keys[0]]);
console.log(Object.keys(['red', 'blue']));
Este exemplo mostra as chaves de índice numérico antes das outras strings, mantém "01" entre as chaves de tipo string comuns e usa uma chave retornada para consultar seu valor. Obter as chaves não reordena nem altera as propriedades de record.
Obtenha as chaves e os valores de um objeto com Object.entries()
Use Object.entries(obj) quando a próxima etapa precisar de cada chave junto com o valor correspondente. O método retorna um array de arrays com dois elementos, no formato [[key, value], ...]. Assim como Object.keys(), inclui apenas as propriedades próprias enumeráveis de tipo string do objeto, segue a mesma ordem de propriedades e exclui símbolos. Ele não percorre recursivamente valores que sejam objetos.
A desestruturação facilita o processamento de cada par. O exemplo completo a seguir exibe um rótulo e o valor de cada propriedade; o rótulo no exemplo permanece em inglês:
const settings = { theme: 'dark', language: 'English' };
for (const [key, value] of Object.entries(settings)) {
console.log(`${key}: ${value}`);
}
Escolha Object.keys() se apenas os nomes forem suficientes e Object.entries() se o loop precisar dos nomes e dos valores juntos. Se a chave já for conhecida, não é necessário enumerar o objeto: acesse o valor diretamente com settings.theme ou settings['theme'].
Percorra as chaves de um objeto com for…in
Um loop for...in percorre propriedades enumeráveis de tipo string. Ele também pode incluir propriedades herdadas pelo protótipo do objeto, então seus resultados podem diferir dos de Object.keys(), que lista apenas propriedades próprias. Use Object.hasOwn(obj, key) dentro do loop quando precisar excluir propriedades herdadas. Esse método está disponível nas versões modernas de JavaScript; em ambientes mais antigos, use Object.prototype.hasOwnProperty.call(obj, key).
const parent = { category: 'fruit' };
const item = Object.create(parent);
item.name = 'mango';
for (const key in item) {
if (Object.hasOwn(item, key)) {
console.log(`${key}: ${item[key]}`);
}
}
O loop pode encontrar tanto name quanto a propriedade herdada category, enquanto a verificação de propriedade própria exibe apenas name. Para incluir todas as propriedades enumeráveis, omita essa verificação. Quando precisar de uma lista previsível das chaves próprias enumeráveis de tipo string de um objeto, Object.keys() costuma ser a opção mais clara.
A enumeração é superficial. Se uma propriedade de nível superior contiver outro objeto, a lista de chaves conterá o nome dessa propriedade, e o valor continuará sendo o objeto aninhado. Para listar as chaves aninhadas, chame Object.keys() separadamente nesse valor; a travessia recursiva exige lógica adicional para percorrer cada objeto aninhado. Escolha entre as três abordagens conforme as propriedades de que precisa: Object.keys() para nomes, Object.entries() para pares de nome e valor e for...in para propriedades enumeráveis ao longo da cadeia de protótipos.