578 votes

Effectuer une itération JavaScript objet

J’ai un objet en JavaScript :

Je veux utiliser une boucle for pour obtenir ses propriétés. Et je veux il effectuer une itération dans les parties (pas toutes les propriétés de l’objet à la fois).

Avec un simple tableau je peux le faire avec une boucle standard :

Mais comment le faire avec des objets ?

1150voto

dystroy Points 145126

Pour la plupart des objets, utilisez for .. in :

for (var key in yourobject) {
  console.log(key, yourobject[key]);
}

Pour éviter la journalisation des propriétés héritées, vérifiez auprès de hasOwnProperty :

for (var key in yourobject) {
   if (yourobject.hasOwnProperty(key)) {
      console.log(key, yourobject[key]);
   }
}

Cette MDN documentation explique, plus généralement, la façon de traiter avec 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. Tant que la commande n'est pas garanti, c'est la bonne façon. Dans les navigateurs modernes, vous pouvez utiliser

var keys = Object.keys(yourobject);

Pour être plus compatible, vous feriez mieux de faire ceci :

 var keys = [];
 for (var key in yourobject) {      
     if (yourobject.hasOwnProperty(key)) keys.push(key);
 }

Ensuite, vous pouvez effectuer une itération sur vos biens par index: yourobject[keys[i]] :

for (var i=300; i<keys.length && i<600; i++) { 
   console.log(keys[i], yourobject[keys[i]]);
}

88voto

VisioN Points 62518

Voici une autre solution d’itération pour les navigateurs modernes :

Ou encore plus court :

Cependant, vous devez considérer que les propriétés dans JavaScript objet ne sont pas triés, c.-à-d. ayez aucune commande.

8voto

Cerbrus Points 20704

La seule méthode fiable pour ce faire serait d’enregistrer les données de l’objet à 2 tableaux, une des clés et l’autre pour les données :

Vous pouvez alors itérer sur les baies, comme vous le feriez normalement :

Je n’utilise pas `` , parce que c’est IE 9+.

1voto

Miszy Points 2219

Si vous voulais itérer l'ensemble de l'objet, à la fois vous pouvez utiliser for in boucle:

for (var i in obj) {
  ...
}

Mais si vous voulez diviser l'objet en parties, en fait, vous ne pouvez pas. Il n'y a aucune garantie que les propriétés de l'objet sont dans un ordre spécifique. Donc, je pense à deux solutions.

Premier d'entre eux est de "supprimer" déjà lu propriétés:

var i = 0;
for (var key in obj) {
    console.log(obj[key]);
    delete obj[key];
    if ( ++i > 300) break;
}

Une autre solution à laquelle je pense est d'utiliser Tableau de Tableaux au lieu de l'objet:

var obj = [['key1', 'value1'], ['key2', 'value2']];

Ensuite, la norme for boucle de travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X