110 votes

Accéder aux propriétés non numériques d'un objet par index ?

Si j'ai un tableau comme celui-ci :

var arr = ['one','two','three'];

Je peux ainsi accéder à différentes parties :

console.log(arr[1]);

Comment puis-je accéder aux propriétés d'un objet par leur ordre plutôt que par leur clé ?

Exemple :

var obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
},
jbo = {
    'evenmore'  : 'crazy',
    'something' : 'awesome'
};

Comment puis-je obtenir la première propriété de chaque objet - "quelque chose" de obj et "evenmore" de jbo -sans utiliser explicitement le nom de la propriété ?

Certains d'entre vous semblent penser que je cherche quelque chose comme.. :

console.log(obj['something']);

Ce n'est pas le cas, je cherche spécifiquement à cibler l'index, comme dans le premier exemple - si c'est possible.

2voto

Meysam Khoshbakht Points 167

Avec jquery, vous pouvez le faire :

var arr = $.map(obj,function(value, key) {
    return value;
});
alert(obj[0]);

2voto

Karim Points 161

Obtenez le tableau de clés, inversez-le, puis exécutez votre boucle.

  var keys = Object.keys( obj ).reverse();
  for(var i = 0; i < keys.length; i++){
    var key = keys[i];
    var value = obj[key];
    //do stuff backwards
  }

1voto

arfa Points 69

Vous pouvez créer un tableau contenant les champs de votre objet, utiliser un index sur le tableau et accéder aux propriétés de l'objet par l'intermédiaire de cet index.

propertiesName:['pr1','pr2','pr3']

this.myObject[this.propertiesName[0]]

1voto

Je suis allé de l'avant et j'ai créé une fonction pour vous :

 Object.prototype.getValueByIndex = function (index) {
     /*
         Object.getOwnPropertyNames() takes in a parameter of the object, 
         and returns an array of all the properties.
         In this case it would return: ["something","evenmore"].
         So, this[Object.getOwnPropertyNames(this)[index]]; is really just the same thing as:
         this[propertyName]
    */
    return this[Object.getOwnPropertyNames(this)[index]];
};

let obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
};

console.log(obj.getValueByIndex(0)); // Expected output: "awesome"

1voto

willy wonka Points 317

Bien sûr, c'est possible, mais ce n'est pas aussi immédiat que d'accéder à un tableau par ses index, mais c'est tout de même possible et même relativement simple : en fait, vous n'avez pas à vous battre trop longtemps. Cet exemple de code va vous montrer comment faire :

var obj = {
    'alfa'  : 'value of obj the key alfa',
    'beta'  : 'value of obj the key beta',
    'gamma'  : 'value of obj the key gamma'
};

var jbo = {
    'alfa'  : 'value of jbo the key alfa',
    'beta'  : 'value of jbo the key beta',
    'gamma'  : 'value of jbo the key gamma'
};

alert  ( obj[Object.keys(obj)[1]] );
alert ( jbo[Object.keys(jbo)[1]] );

/* you can even put it into a for loop as follows */

for (i=0;i<3;i++)
{
    document.writeln ( "<br>This could be even a piece of HTML: " + obj[Object.keys(obj)[i]] );
    document.writeln ( "<br>This could be even a piece of HTML: " + jbo[Object.keys(jbo)[i]] );
}

Explication :

Comme vous le savez, l'instruction Object.keys() renvoie un tableau de toutes les propriétés énumérables (c'est-à-dire toutes les clés) de l'objet que vous tapez entre les parenthèses rondes. La seule chose dont vous avez besoin est donc d'indiquer l'index après ce tableau, qui renverra le littéral de la clé trouvé à cet index. La clé elle-même est "digérée" comme d'habitude par l'objet qui renvoie la valeur de cette clé.

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