J'ai un objet qui ressemble à:
Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data);
Mais il n’ya aucun moyen de compter le nombre d’objets dans l’objet, puis d’obtenir enfin la valeur de l’attribut des sous-objets.
J'ai essayé
console.log(obj.Data[0].length); // It does not work
console.log(obj.Data.length); // It does not work
C'est un peu difficile pour moi. J'espère que vous pouvez aider.
Le moyen le plus simple de procéder, avec d'excellentes performances et une compatibilité avec les anciens et les nouveaux navigateurs, consiste à inclure Lo-Dash ou nderscore dans votre page.
Ensuite, vous pouvez utiliser soit _.size(object)
ou _.keys(object).length
Pour votre obj.Data
, vous pouvez le tester avec:
console.log( _.size(obj.Data) );
ou:
console.log( _.keys(obj.Data).length );
Lo-Dash et Underscore sont d'excellentes bibliothèques. vous en trouverez un très utile dans votre code. (Ils sont assez semblables les uns aux autres; Lo-Dash est une version plus récente avec quelques avantages.)
Vous pouvez également inclure cette fonction dans votre code, qui parcourt simplement les propriétés de l'objet et les compte:
function ObjectLength( object ) {
var length = 0;
for( var key in object ) {
if( object.hasOwnProperty(key) ) {
++length;
}
}
return length;
};
Vous pouvez tester cela avec:
console.log( ObjectLength(obj.Data) );
Ce code n'est toutefois pas aussi rapide que dans les navigateurs modernes. Pour une version beaucoup plus rapide dans les navigateurs modernes et qui fonctionne encore dans les anciens, vous pouvez utiliser:
function ObjectLength_Modern( object ) {
return Object.keys(object).length;
}
function ObjectLength_Legacy( object ) {
var length = 0;
for( var key in object ) {
if( object.hasOwnProperty(key) ) {
++length;
}
}
return length;
}
var ObjectLength =
Object.keys ? ObjectLength_Modern : ObjectLength_Legacy;
et comme avant, testez-le avec:
console.log( ObjectLength(obj.Data) );
Ce code utilise Object.keys(object).length
dans les navigateurs modernes et revient à compter dans une boucle pour les anciens navigateurs.
Mais si vous allez travailler tout ce travail, je vous recommanderais plutôt d'utiliser Lo-Dash ou Underscore pour obtenir tous les avantages offerts par ces bibliothèques.
J'ai mis en place un jsPerf qui compare la vitesse de ces différentes approches . S'il vous plaît lancez-le dans tous les navigateurs que vous avez pratique d'ajouter aux tests.
Merci à Barmar pour suggérant Object.keys
pour les nouveaux navigateurs dans sa réponse.
Dans les navigateurs récents, vous pouvez utiliser:
Object.keys(obj.Data).length
Voir MDN
Pour les navigateurs plus anciens, utilisez la boucle for-in
dans la réponse de Michael Geary.
Essayez Demo Here
var list ={}; var count= Object.keys(list).length;