Eu tenho um objeto em JavaScript:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Eu quero usar um for
loop para obter suas propriedades. E quero iterá-lo em partes (nem todas as propriedades do objeto de uma vez).
Com uma matriz simples, posso fazer isso com um for
loop padrão :
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
Mas como fazer isso com objetos?
Respostas:
Para a maioria dos objetos, use
for .. in
:Com o ES6, se você precisar de chaves e valores simultaneamente, faça
Para evitar o registro de propriedades herdadas, verifique com hasOwnProperty :
Você não precisa verificar
hasOwnProperty
ao iterar as chaves se estiver usando um objeto simples (por exemplo, um com que você se criou{}
).Esta documentação do MDN explica de maneira mais geral como lidar com objetos e suas propriedades.
Se você quiser fazê-lo "em partes", o melhor é extrair as chaves em uma matriz. Como o pedido não é garantido, esta é a maneira correta. Nos navegadores modernos, você pode usar
Para ser mais compatível, é melhor fazer o seguinte:
Em seguida, você pode iterar suas propriedades por índice
yourobject[keys[i]]
:fonte
keys
o código fornecido deve ser suficiente.Aqui está outra solução de iteração para navegadores modernos:
Ou sem a função de filtro:
No entanto, você deve considerar que as propriedades no objeto JavaScript não são classificadas, ou seja, não têm ordem.
fonte
Usando
Object.entries
você, faça algo assim.O método Object.entries () retorna uma matriz da propriedade enumerável de um determinado objeto [chave, valor]
Então você pode iterar sobre o Objeto e ter
key
evalue
para cada um dos objetos e obter algo parecido com isto.ou assim
Para uma referência, consulte os documentos MDN para Entradas de objeto
fonte
Com os novos recursos do ES6 / ES2015, você não precisa mais usar um objeto para iterar sobre um hash. Você pode usar um mapa . Os mapas Javascript mantêm as chaves em ordem de inserção, o que significa que você pode iterá-las sem precisar verificar o hasOwnProperty, que sempre foi realmente um hack.
Iterar sobre um mapa:
ou use forEach:
fonte
Se você deseja a chave e o valor ao iterar, pode usar um loop for ... com Object.entries .
fonte
A única maneira confiável de fazer isso seria salvar os dados do objeto em 2 matrizes, uma das chaves e outra para os dados:
Você pode iterar sobre as matrizes como faria normalmente:
Não estou usando
Object.keys(obj)
, porque é o IE 9+.fonte
-> se iterarmos sobre um objeto JavaScript usando e encontrarmos a chave da matriz de objetos
fonte
Se você quiser iterar todo o objeto de uma só vez, poderá usar o
for in
loop:Mas se você deseja dividir o objeto em partes, na verdade não pode. Não há garantia de que as propriedades no objeto estejam em qualquer ordem especificada. Portanto, posso pensar em duas soluções.
O primeiro deles é "remover" as propriedades já lidas:
Outra solução em que posso pensar é usar Array of Arrays em vez do objeto:
Então, o
for
loop padrão funcionará.fonte
Finalmente, criei uma função útil de utilitário com uma interface unificada para iterar Objetos, Strings, Arrays, TypedArrays, Maps, Sets, (quaisquer Iterables).
https://github.com/alrik/iterate-javascript
fonte
Você pode tentar usar o lodash- Uma moderna biblioteca de utilitários JavaScript que fornece js de modularidade, desempenho e extras para iteração rápida de objetos: -
fonte
Para iteração de objetos, geralmente usamos um
for..in
loop. Essa estrutura percorrerá todas as propriedades enumeráveis , incluindo aquelas herdadas por herança prototípica. Por exemplo:No entanto,
for..in
fará um loop sobre todos os elementos enumeráveis e isso não nos permitirá dividir a iteração em partes. Para conseguir isso, podemos usar aObject.keys()
função incorporada para recuperar todas as chaves de um objeto em uma matriz. Em seguida, podemos dividir a iteração em vários loops e acessar as propriedades usando a matriz de chaves. Por exemplo:fonte
fonte
Object
s estão em ordem. Eles não são.If you can make sense of the sentence it worked
só funciona devido a detalhes de implementação. Não é garantido que funcione. Além disso, você não deve TitleCase suas funções e variáveis. Isso é paraclass
es.Realmente uma PITA, isso não faz parte do Javascript padrão.
Nota: mudei os parâmetros de retorno de chamada para (valor, chave) e adicionei um terceiro objeto para tornar a API consistente com outras APIs.
Use-o assim
fonte
this
o que quiser para o retorno de chamada, pois o retorno de chamada possui seu próprio contexto.objectForEach
função real . Desculpe se isso foi confuso.Sim. Você pode percorrer um objeto usando o loop for. Aqui está um exemplo
NOTA: o exemplo mencionado acima funcionará apenas no IE9 +. Consulte o suporte ao navegador Objec.keys aqui .
fonte
Experimente on-line
fonte