Programação
Radzivon Alkhovik
Entusiasta da automação de baixo código
4 de julho de 2024
Uma plataforma de baixo código que combina simplicidade sem código com potência de código completo 🚀 Você pode usar a plataforma de baixo código para obter mais informações.
Comece a usar gratuitamente
4 de julho de 2024
-
7
leitura mínima

Como fazer a iteração em um objeto JavaScript?

Radzivon Alkhovik
Entusiasta da automação de baixo código
Tabela de conteúdo

Iterar sobre objetos é uma tarefa fundamental na programação JavaScript. Ao contrário dos arrays, os objetos em JavaScript não são iteráveis por padrão, o que significa que você não pode usar métodos como forEach(), map() ou for...of loop diretamente em um objeto. No entanto, há várias maneiras de fazer um loop pelas propriedades de um objeto e acessar as chaves e os valores. Neste artigo, exploraremos diferentes métodos para iterar sobre um objeto JavaScript de forma eficiente, juntamente com sua sintaxe, exemplos e casos de uso.

Principais conclusões: Os objetos JavaScript não são inerentemente iteráveis, mas existem vários métodos para percorrer suas propriedades. O loop for...in é tradicional, mas requer uma verificação hasOwnProperty(), enquanto métodos mais recentes como Object.entries() com map()/forEach(), Object.keys() com forEach() e Object.values() oferecem abordagens mais simplificadas. O método _.forOwn() do Lodash oferece uma sintaxe conveniente para quem já está usando a biblioteca. A escolha do método de iteração depende dos requisitos de compatibilidade do navegador, da legibilidade do código e de casos de uso específicos. Embora o desempenho possa variar um pouco entre os métodos, as diferenças geralmente são insignificantes para a maioria dos aplicativos, e os desenvolvedores devem priorizar a clareza e a facilidade de manutenção do código

Escreva o código mesmo que você seja um iniciante com o AI Assistent do Latenode

Método 1: Usando for...in loop

O loop for...in é uma forma tradicional de iterar sobre as propriedades de um objeto. Ele permite que você acesse tanto as chaves quanto os valores de um objeto. Veja como ele funciona:

Sintaxe:


for (let key in object) {
  se (object.hasOwnProperty(key)) {
    // Executar operações com a chave e o objeto[chave]
  }
}

Exemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ': ' + person[key]);
  }
}
Output:
name: John
age: 30
city: New York

É importante que você use o método hasOwnProperty() dentro do loop para verificar se a chave pertence ao próprio objeto e não à sua cadeia de protótipos. Isso garante que você itere apenas sobre as propriedades do próprio objeto e evite quaisquer propriedades herdadas.

O loop for...in javascript através do objeto é uma maneira direta de iterar sobre as propriedades de um objeto. Entretanto, ele tem algumas limitações:

  • Ele itera sobre todas as propriedades enumeráveis de um objeto, incluindo as herdadas da cadeia de protótipos. É por isso que você precisa usar hasOwnProperty() para filtrar as propriedades herdadas.
  • A ordem de iteração não é garantida. As propriedades podem não ser acessadas na mesma ordem em que foram definidas.

Apesar dessas limitações, o loop for...in continua sendo um método comumente usado para iteração de objetos devido à sua simplicidade e ao amplo suporte do navegador.

Método 2: Usando o método Object.entries() e o método map()

O método Object.entries() é um acréscimo mais recente ao JavaScript (introduzido no ECMAScript 2017) que retorna uma matriz de pares de propriedades enumeráveis de cadeias de caracteres [chave, valor] de um determinado objeto. Em seguida, podemos usar o método map() para iterar sobre a matriz e acessar as chaves e os valores.

Sintaxe:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ': ' + person[key]);
  }
}
Output:
name: John
age: 30
city: New York

Exemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ': ' + person[key]);
  }
}
Output:
name: John
age: 30
city: New York

O método Object.entries() oferece uma maneira conveniente de obter uma matriz de pares de valores-chave de um objeto. Ao combiná-lo com o método map(), você pode iterar facilmente sobre a matriz e executar operações em cada par de valores-chave.

Uma vantagem de usar Object.entries() é que ele retorna apenas as propriedades enumeráveis do próprio objeto, excluindo quaisquer propriedades herdadas da cadeia de protótipos. Isso elimina a necessidade de uma verificação adicional de hasOwnProperty().

No entanto, lembre-se de que Object.entries() não é compatível com navegadores mais antigos (como o Internet Explorer). Se a compatibilidade do navegador for uma preocupação, talvez você precise usar um polyfill ou um método alternativo.

Para obter mais informações sobre Object.entries(), você pode consultar a documentação do MDN.

Método 3: Usando o método forEach() e o método Object.keys()

O método Object.keys() retorna uma matriz de nomes de propriedades enumeráveis de um determinado objeto (chaves). Podemos usar o método forEach() para iterar sobre a matriz de chaves e acessar os valores correspondentes usando as chaves.

Sintaxe:



Object.keys(object).forEach(key => {
  // Perform operations with key and object[key]
});

Exemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

Object.keys(person).forEach(key => {
  console.log(key + ': ' + person[key]);
});
Output:
name: John
age: 30
city: New York

O uso de Object.keys() em combinação com forEach() fornece uma maneira de iterar sobre as chaves de um objeto e acessar os valores correspondentes. Esse método é útil quando você precisa apenas das chaves de um objeto e deseja executar operações com base nessas chaves.

Semelhante a Object.entries(), Object.keys() retorna apenas as propriedades enumeráveis do próprio objeto, portanto, você não precisa usar hasOwnProperty() para filtrar as propriedades herdadas.

Para obter mais informações sobre Object.keys(), você pode consultar a documentação do MDN.

Método 4: Usando o método Lodash _.forOwn()

O Lodash é uma biblioteca de utilitários popular que oferece um conjunto de funções úteis para você trabalhar com objetos e matrizes. Se você já estiver usando o Lodash em seu projeto, poderá aproveitar o método _.forOwn() para iterar sobre as propriedades próprias de um objeto.

Sintaxe:



_.forOwn(object, (value, key) => {
  // Perform operations with key and value
});


Exemplo:



const _ = require('lodash');

const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

_.forOwn(person, (value, key) => {
  console.log(key + ': ' + value);
});
Output:
name: John
age: 30
city: New York

O método _.forOwn() itera sobre as propriedades enumeráveis próprias de um objeto e fornece o valor e a chave para a função de retorno de chamada. É uma alternativa conveniente ao loop for...in por meio do javascript object.entries quando você já estiver usando o Lodash em seu projeto.

Observe que, para usar o Lodash, você precisa instalar a biblioteca e importá-la para o seu projeto. Se você não estiver usando o Lodash para outros fins, talvez não seja necessário incluí-lo apenas para a iteração de objetos.

Para obter mais informações sobre o Lodash e seu loop js por meio de métodos de iteração de objetos, você pode consultar a documentação do Lodash.

Método 5: Usando o método Object.values() e o método forEach()

O método Object.values() retorna uma matriz de valores de propriedades enumeráveis de um determinado objeto. Você pode usar o método forEach() para iterar pelo javascript do objeto sobre a matriz de valores. Se você também precisar das chaves correspondentes, poderá usar o método Object.keys() em conjunto.

Sintaxe:



Object.values(object).forEach((value, index) => {
  const key = Object.keys(object)[index];
  // Perform operations with key and value
});

Exemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

Object.values(person).forEach((value, index) => {
  const key = Object.keys(person)[index];
  console.log(key + ': ' + value);
});
Output:
name: John
age: 30
city: New York

Com Object.values(), você pode iterar diretamente sobre os valores de um objeto. Se você também precisar das chaves correspondentes, poderá obtê-las usando Object.keys() e acessando a chave no mesmo índice do valor.

Esse método é útil quando você precisa trabalhar principalmente com os valores de um objeto e, opcionalmente, acessar as chaves quando necessário.

Para obter mais informações sobre Object.values(), você pode consultar a documentação do MDN.

Concluindo

Neste artigo, exploramos vários métodos para iterar sobre um objeto iterado JavaScript. Cada método tem suas próprias vantagens e casos de uso:

  • O loop for...in é uma forma tradicional de iterar sobre um objeto javascript. É simples e amplamente aceito, mas requer uma verificação adicional hasOwnProperty() para evitar a iteração sobre propriedades herdadas.
  • O método Object.entries(), combinado com map() ou forEach(), fornece uma maneira concisa de acessar as chaves e os valores de um objeto. Ele elimina a necessidade de hasOwnProperty(), mas pode não ser compatível com navegadores mais antigos.
  • O método Object.keys(), juntamente com forEach(), permite que você itere sobre as chaves de um objeto e acesse os valores correspondentes. Ele é útil quando você precisa trabalhar principalmente com as chaves.
  • O método Lodash _.forOwn() é uma opção conveniente se você já estiver usando o Lodash em seu projeto. Ele fornece uma sintaxe limpa para iterar sobre as propriedades próprias de um objeto.
  • O método Object.values(), associado a forEach(), concentra-se em iterar sobre os valores de um objeto de interface. Você pode usar Object.keys() em conjunto se também precisar das chaves.

Ao escolher um método para iterar sobre um objeto JavaScript, considere fatores como compatibilidade com o navegador, legibilidade do código e requisitos específicos do seu caso de uso. Seja qual for o método que você escolher, entender como iterar efetivamente sobre objetos é fundamental para uma programação JavaScript eficiente.

Escreva o código mesmo que você seja um iniciante com o AI Assistent do Latenode

PERGUNTAS FREQUENTES

Qual é a diferença entre for...in e Object.entries()?

O loop for...in itera sobre todas as propriedades enumeráveis de um objeto, inclusive as herdadas da cadeia de protótipos. Ele exige uma verificação adicional com hasOwnProperty() para evitar a iteração sobre propriedades herdadas. Por outro lado, Object.entries() retorna uma matriz dos pares de propriedades enumeráveis [key, value] com chave string de um determinado objeto, que podem ser facilmente iterados usando métodos como map() ou forEach(). Object.entries() inclui apenas as propriedades do próprio objeto, excluindo as herdadas.

Qual método devo usar se precisar apenas de chaves ou apenas de valores?

Se você precisar apenas das chaves de um objeto iterado js, poderá usar o método Object.keys(), que retorna uma matriz dos nomes de propriedades enumeráveis (chaves) de um determinado objeto. Se você precisar apenas dos valores, poderá usar o método Object.values(), que retorna uma matriz dos valores de propriedades enumeráveis de um determinado objeto.

Qual método é mais rápido ou mais eficiente?

O desempenho de diferentes métodos pode variar de acordo com o mecanismo JavaScript e o tamanho do objeto. Em geral, o loop for...in é considerado um pouco mais rápido do que o uso de métodos como Object.entries() ou Object.keys() com forEach(). No entanto, a diferença de desempenho costuma ser insignificante, a menos que você esteja lidando com objetos extremamente grandes. Recomenda-se priorizar a legibilidade e a manutenção do código, a menos que você tenha requisitos específicos de desempenho.

Como posso iterar sobre as entradas de um objeto preservando a ordem das chaves?

Os objetos em JavaScript não são ordenados por padrão, e a ordem das chaves não é garantida. Se precisar iterar sobre as propriedades de um objeto em uma ordem específica, você tem algumas opções:

  • Use o método Object.entries() para obter uma matriz de pares [key, value], classificar a matriz com base nas chaves e, em seguida, iterar sobre a matriz classificada.
  • Crie uma matriz de chaves na ordem desejada e, em seguida, acesse os valores correspondentes do objeto usando essas chaves.
  • Use um Map em vez de um objeto, pois o Map mantém a ordem de inserção dos pares de valores-chave. Você pode converter um objeto em um Map usando new Map(Object.entries(object)).

Posso usar funções de seta com esses métodos de iteração?

Sim, você pode usar funções de seta com métodos como map(), forEach() e _.forOwn(). As funções de seta fornecem uma sintaxe concisa para escrever expressões de função. Por exemplo:



Object.entries(person).map(([key, value]) => {
  console.log(key + ': ' + value);
});


No entanto, lembre-se de que as funções de seta têm uma ligação lexical this, o que significa que elas herdam o valor this do escopo circundante. Se você precisar acessar o contexto this na chamada de retorno de iteração, talvez seja necessário usar uma expressão de função regular.

Há outras bibliotecas ou métodos para iteração de objetos?

Sim, há várias outras bibliotecas e métodos que fornecem utilitários para a iteração de objetos. Algumas das mais populares incluem:

  • Underscore.js: Fornece o método _.each() para iterar sobre objetos.
  • Lodash: Oferece vários métodos como _.forOwn(), _.forIn() e _.forEach() para iteração de objetos.
  • jQuery: Tem o método $.each() que pode ser usado para iterar sobre objetos.

Essas bibliotecas oferecem funcionalidade adicional e podem ser úteis se você já as estiver usando em seu projeto. No entanto, se você precisar apenas da iteração básica de objetos, os métodos nativos do JavaScript discutidos neste artigo serão suficientes.

Lembre-se de que a escolha do método de iteração depende de seus requisitos específicos, da base de código e de sua preferência pessoal. Faça experiências com diferentes abordagens e escolha aquela que melhore a legibilidade, a manutenção e a eficiência do código em seu caso de uso específico.

Blogs relacionados

Caso de uso

Com o apoio de