J'ai un objet en JavaScript:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Je veux utiliser un for
boucle pour obtenir ses propriétés. Et je veux l'itérer en plusieurs parties (pas toutes les propriétés des objets à la fois).
Avec un tableau simple, je peux le faire avec une for
boucle standard :
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
Mais comment faire avec des objets?
Réponses:
Pour la plupart des objets, utilisez
for .. in
:Avec ES6, si vous avez besoin de clés et de valeurs simultanément, faites
Pour éviter la journalisation des propriétés héritées, vérifiez avec hasOwnProperty :
Vous n'avez pas besoin de vérifier
hasOwnProperty
lors de l'itération sur les touches si vous utilisez un objet simple (par exemple celui que vous avez créé vous-même{}
).Cette documentation MDN explique plus généralement comment traiter les objets et leurs propriétés.
Si vous voulez le faire "en morceaux", le mieux est d'extraire les clés dans un tableau. Comme la commande n'est pas garantie, c'est la bonne façon. Dans les navigateurs modernes, vous pouvez utiliser
Pour être plus compatible, vous feriez mieux de faire ceci:
Ensuite, vous pouvez parcourir vos propriétés par index
yourobject[keys[i]]
::la source
keys
partir du code donné devrait suffire.Voici une autre solution d'itération pour les navigateurs modernes:
Ou sans la fonction de filtre:
Cependant, vous devez considérer que les propriétés de l'objet JavaScript ne sont pas triées, c'est-à-dire n'ont pas d'ordre.
la source
L' utilisation que
Object.entries
vous faites quelque chose comme ça.La méthode Object.entries () renvoie un tableau de la propre propriété énumérable d'un objet donné [clé, valeur]
Vous pouvez donc itérer sur l'objet et avoir
key
etvalue
pour chacun de l'objet et obtenir quelque chose comme ça.ou comme ça
Pour une référence, consultez les documents MDN pour les entrées d'objet
la source
Avec les nouvelles fonctionnalités ES6 / ES2015, vous n'avez plus besoin d'utiliser un objet pour parcourir un hachage. Vous pouvez utiliser une carte . Les cartes Javascript gardent les clés dans l'ordre d'insertion, ce qui signifie que vous pouvez les parcourir sans avoir à vérifier le hasOwnProperty, qui a toujours été vraiment un hack.
Itérer sur une carte:
ou utilisez forEach:
la source
Si vous voulez la clé et la valeur lors de l'itération, vous pouvez utiliser une boucle for ... of avec Object.entries .
la source
La seule façon fiable de le faire serait d'enregistrer vos données d'objet dans 2 tableaux, l'un des clés et l'autre pour les données:
Vous pouvez ensuite parcourir les tableaux comme vous le feriez normalement:
Je n'utilise pas
Object.keys(obj)
, car c'est IE 9+.la source
-> si nous itérons sur un objet JavaScript en utilisant et en trouvant la clé du tableau d'objets
la source
Si vous vouliez itérer tout l'objet à la fois, vous pouvez utiliser la
for in
boucle:Mais si vous voulez diviser l'objet en parties, vous ne le pouvez pas. Il n'y a aucune garantie que les propriétés de l'objet sont dans un ordre spécifié. Par conséquent, je peux penser à deux solutions.
La première consiste à "supprimer" les propriétés déjà lues:
Une autre solution à laquelle je peux penser est d'utiliser Array of Arrays au lieu de l'objet:
Ensuite, la
for
boucle standard fonctionnera.la source
J'ai finalement trouvé une fonction utilitaire pratique avec une interface unifiée pour itérer les objets, les chaînes, les tableaux, les tableaux typés, les cartes, les ensembles (tous les Iterables).
https://github.com/alrik/iterate-javascript
la source
Vous pouvez essayer d'utiliser lodash - une bibliothèque d'utilitaires JavaScript moderne offrant modularité, performances et extras js pour itérer rapidement les objets: -
la source
Pour l'itération d'objet, nous utilisons généralement une
for..in
boucle. Cette structure parcourra toutes les propriétés énumérables , y compris celles héritées via l'héritage prototypique. Par exemple:Cependant,
for..in
fera une boucle sur tous les éléments énumérables et cela ne nous permettra pas de diviser l'itération en morceaux. Pour ce faire, nous pouvons utiliser laObject.keys()
fonction intégrée pour récupérer toutes les clés d'un objet dans un tableau. Nous pouvons ensuite diviser l'itération en plusieurs boucles for et accéder aux propriétés à l'aide du tableau de clés. Par exemple:la source
la source
Object
s sont en ordre. Ils ne sont pas.If you can make sense of the sentence it worked
ne fonctionne qu'en raison des détails de mise en œuvre. Il n'est pas du tout garanti de fonctionner. Vous ne devez pas non plus TitleCase vos fonctions et variables. C'est pourclass
es.Vraiment un PITA, cela ne fait pas partie du Javascript standard.
Remarque: J'ai basculé les paramètres de rappel sur (valeur, clé) et ajouté un troisième objet pour rendre l'API cohérente avec les autres API.
Utilisez-le comme ça
la source
this
ce que vous voulez pour le rappel, car le rappel a son propre contexte.objectForEach
fonction réelle . Désolé si c'était confus.Oui. Vous pouvez parcourir un objet en utilisant la boucle for. Voici un exemple
REMARQUE: l'exemple mentionné ci-dessus ne fonctionnera que dans IE9 +. Voir le support du navigateur Objec.keys ici .
la source
Essayez en ligne
la source