Si j'ai un tableau comme celui-ci:
var arr = ['one','two','three'];
Je peux accéder à différentes parties en faisant ceci:
console.log(arr[1]);
Comment puis-je accéder aux propriétés des objets par leur ordre plutôt que par la clé?
Exemple:
var obj = {
'something' : 'awesome',
'evenmore' : 'crazy'
},
jbo = {
'evenmore' : 'crazy',
'something' : 'awesome'
};
Comment pourrais-je obtenir la première propriété pour chaque objet - "quelque chose" de obj
et "même" de jbo
– sans utiliser explicitement le nom de la propriété?
Maintenant, quelques-uns d'entre vous semblent penser que je suis après quelque chose comme:
console.log(obj['something']);
Ce n'est pas le cas, je cherche spécifiquement à cibler l'index, tout comme le premier exemple - si c'est possible.
"Je cherche spécifiquement à cibler l'index, tout comme le premier exemple - si c'est possible."
Non, ce n'est pas possible.
Le plus proche que vous puissiez obtenir est d'obtenir un tableau des clés de l'objet et de l'utiliser:
var keys = Object.keys( obj );
... mais rien ne garantit que les clés seront rendues dans l'ordre que vous avez défini. Cela pourrait donc ressembler à:
keys[ 0 ]; // 'evenmore'
keys[ 1 ]; // 'something'
La seule façon pour moi d’y parvenir est de créer une méthode qui vous donne la propriété en utilisant Object.keys();
.
var obj = {
dog: "woof",
cat: "meow",
key: function(n) {
return this[Object.keys(this)[n]];
}
};
obj.key(1); // "meow"
Démo: http://jsfiddle.net/UmkVn/
Il serait possible d'étendre cela à tous les objets en utilisant Object.prototype;
mais ce n'est généralement pas recommandé.
Au lieu de cela, utilisez un assistant de fonction:
var object = {
key: function(n) {
return this[ Object.keys(this)[n] ];
}
};
function key(obj, idx) {
return object.key.call(obj, idx);
}
key({ a: 6 }, 0); // 6
var obj = {
'key1':'value',
'2':'value',
'key 1':'value'
}
console.log(obj.key1)
console.log(obj['key1'])
console.log(obj['2'])
console.log(obj['key 1'])
// will not work
console.log(obj.2)
Modifier:
"Je cherche spécifiquement à cibler l'indice, comme dans le premier exemple - si c'est possible."
En réalité, l'index est la clé. Si vous souhaitez stocker la position d'une clé, vous devez créer un objet personnalisé pour gérer cela.
Vous pouvez utiliser la méthode Object.values()
si vous ne voulez pas utiliser la Object.keys()
.
Par opposition à la méthode Object.keys()
qui renvoie un tableau des propriétés énumérables propres à un objet donné, par exemple:
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
Souhaitez imprimer le tableau suivant:
[ 'a', 'b', 'c' ]
La méthode Object.values()
renvoie un tableau de la propriété énumérable propre à un objet donné values
.
Donc, si vous avez le même objet mais utilisez plutôt des valeurs,
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.values(object1));
Vous obtiendrez le tableau suivant:
[ 'somestring', 42, false ]
Donc, si vous voulez accéder au object1.b
, mais en utilisant un index, vous pouvez utiliser:
Object.values(object1)[1] === 42
Vous pouvez en savoir plus sur cette méthode ici .
Obtenez le tableau de clés, inversez-le, puis lancez 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
}
en jquery vous pouvez faire ceci:
var arr = $.map(obj,function(value, key) {
return value;
});
alert(obj[0]);
Si vous n'êtes pas sûr que Object.keys () va vous retourner les clés dans le bon ordre, vous pouvez plutôt essayer cette logique
var keys = []
var obj = {
'key1' : 'value1',
'key2' : 'value2',
'key3' : 'value3',
}
for (var key in obj){
keys.Push(key)
}
console.log(obj[keys[1]])
console.log(obj[keys[2]])
console.log(obj[keys[3]])