Considérer:
var object = {
foo: {},
bar: {},
baz: {}
}
Comment pourrais-je faire ceci:
var first = object[0];
console.log(first);
Évidemment, cela ne fonctionne pas car le premier index est nommé foo
, pas 0
.
console.log(object['foo']);
fonctionne, mais je ne sais pas comment il s’appelle foo. On pourrait nommer n'importe quoi. Je veux juste le premier.
Si l'ordre des objets est important, vous devez réviser votre schéma JSON pour stocker les objets dans un tableau:
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
ou peut-être:
[
["foo", {}],
["bar", {}],
["baz", {}]
]
Comme Ben Alpert le fait remarquer, les propriétés des objets Javascript ne sont pas ordonnées et votre code est cassé si vous attendez qu’ils énumèrent dans le même ordre qu’ils sont spécifiés dans le littéral d’objet - il n’existe pas de propriété "première".
Juste pour le plaisir, cela fonctionne dans JS 1.8.5
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
Cela correspond au même ordre que vous verriez faire
for (o in obj) { ... }
Si vous voulez quelque chose de concis, essayez:
for (first in obj) break;
alert(first);
enveloppé comme une fonction:
function first(obj) {
for (var a in obj) return a;
}
ils ne sont pas vraiment commandés, mais vous pouvez faire:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
la .hasOwnProperty()
est importante pour ignorer les objets prototypés.
Cela ne vous donnera pas le premier parce que les objets javascript ne sont pas ordonnés, mais cela peut aller dans certains cas.
myObject[Object.keys(myObject)[0]]
pour la première clé de l'objet que vous pouvez utiliser
console.log(Object.keys(object)[0]);//print key's name
pour la valeur
console.log(object[Object.keys(object)[0]]);//print key's value
Il n’existe aucun moyen d’obtenir le premier élément, vu que les "hashes" (objets) en JavaScript ont des propriétés non ordonnées. Votre meilleur pari est de stocker les clés dans un tableau:
var keys = ["foo", "bar", "baz"];
Ensuite, utilisez cela pour obtenir la valeur appropriée:
object[keys[0]]
ES6
const [first] = Object.keys(obj)
En utilisant le trait de soulignement, vous pouvez utiliser _.pairs pour obtenir la première entrée d'objet en tant que paire clé-valeur, comme suit:
_.pairs(obj)[0]
La clé serait alors disponible avec un autre indice [0]
, la valeur avec [1]
J'ai eu le même problème hier. Je l'ai résolu comme ça:
var obj = {
foo:{},
bar:{},
baz:{}
},
first = null,
key = null;
for (var key in obj) {
first = obj[key];
if(typeof(first) !== 'function') {
break;
}
}
// first is the first enumerated property, and key it's corresponding key.
Ce n’est pas la solution la plus élégante, et je suis à peu près sûr que cela peut donner des résultats différents selon les navigateurs (c’est-à-dire que les spécifications spécifient que l’énumération n’est pas nécessaire pour énumérer les propriétés dans le même ordre que celles définies). Cependant, je n'avais qu'une seule propriété dans mon objet, donc ce n'était pas un problème. J'avais juste besoin de la première clé.
Pour obtenir la première clé de votre objet
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'
Vous pouvez faire quelque chose comme ça:
var object = {
foo:{a:'first'},
bar:{},
baz:{}
}
function getAttributeByIndex(obj, index){
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return null;
}
var first = getAttributeByIndex(object, 0); // returns the value of the
// first (0 index) attribute
// of the object ( {a:'first'} )
Basé sur CMSréponse . Je ne reçois pas la valeur directement, je prends la clé à son index et l'utilise pour obtenir la valeur:
Object.keyAt = function(obj, index) {
var i = 0;
for (var key in obj) {
if ((index || 0) === i++) return key;
}
};
var obj = {
foo: '1st',
bar: '2nd',
baz: '3rd'
};
var key = Object.keyAt(obj, 1);
var val = obj[key];
console.log(key); // => 'bar'
console.log(val); // => '2nd'
Ma solution:
Object.prototype.__index = function(index)
{
var i = -1;
for (var key in this)
{
if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
++i;
if (i >= index)
return this[key];
}
return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'Ding'};
alert(aObj.__index(4));