126 votes

Comment puis-je accéder à des propriétés d’un objet javascript si je n ' sais pas les noms ?

Disons que vous avez un objet javascript comme ceci:

var data = { Name: 'Property Name', Value: '0' };

Vous pouvez accéder aux propriétés par le nom de la propriété:

var name = data.Name;
var value = data["Value"];

Mais est-il possible d'obtenir ces valeurs si vous ne connaissez pas le nom de l'propriétés? Le non-ordonnée de la nature de ces propriétés font qu'il est impossible de les distinguer?

Dans mon cas, je pense en particulier à une situation où une fonction doit accepter une série de paires nom-valeur, mais les noms des propriétés peuvent changer.

Mes pensées sur la façon de faire jusqu'à présent, est de faire passer les noms des propriétés de la fonction avec les données, mais cela se sent comme un hack. Je préfère le faire avec l'introspection, si possible.

145voto

Ron DeVera Points 9085

Vous pouvez faire une boucle par des touches de cette manière:

for (var key in data) {
  console.log(key);
}

Cette logs "Nom" et "Valeur".

Si vous avez de plus en plus complexe du type d'objet (pas juste une plaine de hachage comme objet, comme dans la question d'origine), vous devrez seulement faire une boucle par touches qui appartiennent à l'objet lui-même, par opposition à des touches sur l'objet du prototype:

for (var key in data) {
  if (data.hasOwnProperty(key)) {
    console.log(key);
  }
}

Comme vous l'avez remarqué, les touches ne sont pas garantis d'être dans un ordre particulier. Notez comment cela diffère de la suivante:

for each (var value in data) {
  console.log(value);
}

Cet exemple des boucles à travers les valeurs, de sorte qu'il se connecte Property Name et 0. N. B.: L' for each syntaxe est la plupart du temps pris en charge uniquement dans Firefox, mais pas dans les autres navigateurs.

Si votre cible navigateurs prennent en charge l'ES5, ou de votre site inclut es5-shim.js (recommandé), vous pouvez également utiliser Object.keys:

var data = { Name: 'Property Name', Value: '0' };
console.log(Object.keys(data)); // => ["Name", "Value"]

et une boucle avec des Array.prototype.forEach:

Object.keys(data).forEach(function (key) {
  console.log(data[key]);
});
// => Logs "Property Name", 0

68voto

Adam Lassek Points 18918

EcmaScript 5 introduit Object.keys et tableau #forEach , ce qui en fait un peu plus facile :

10voto

karim79 Points 178055
for(var property in data) {
    alert(property);
}

4voto

kennebec Points 33886

Vous aurez souvent besoin d’examiner les propriétés spécifiques d’une instance d’un objet, sans toutes ses méthodes de prototype partagé et propriétés :

1voto

Cloid J. Green Points 1
var fs   = require("fs");

fs.stat( process.argv[1], function( err, stats ){
if (err) {
     console.log( err.message ); 
     return;    
} else {
 console.log(JSON.stringify(stats));

/*  this is the answer here  */

    for (var key in Object.keys(stats)){
    var t = Object.keys( stats )[key];
    console.log( t + " value =: " + stats[t]  );
     }  

/*  to here, run in node */
   }
});

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