web-dev-qa-db-fra.com

Obtenir le premier index d'un objet

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.

195
Ryan Florence

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".

61
Miles

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) { ... }
322
Jacob

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;
}
204
Patrick Hayes

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.

77
Luke Schafer

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]]
75
Rob Fox

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
38
jitendra varshney

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]]
17
Sophie Alpert

ES6

const [first] = Object.keys(obj)
13
Richard Ayotte

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]

12
George Jempty

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é.

10
PatrikAkerstrand

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'
6
ldls

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'} )
6
CMS

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'
5
yckart

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));
2
diyism