Domanda

Prendere in considerazione:

var object = {
  foo: {},
  bar: {},
  baz: {}
}

Come farei questo:

var first = object[0];
console.log(first);

Ovviamente, ciò non funziona perché il primo indice è nominato foo, non 0.

console.log(object['foo']);

funziona, ma non so che si chiami foo.Potrebbe avere qualsiasi nome.Voglio solo il primo.

È stato utile?

Soluzione

Se l'ordine degli oggetti è significativo, si dovrebbe rivedere lo schema JSON per memorizzare gli oggetti in un array:

[
    {"name":"foo", ...},
    {"name":"bar", ...},
    {"name":"baz", ...}
]

o forse:

[
    ["foo", {}],
    ["bar", {}],
    ["baz", {}]
]

Come Ben Alpert fa notare, le proprietà di oggetti JavaScript non sono ordinati, e il codice è rotto, se ci si aspetta che enumerare nello stesso ordine in cui sono specificati nel letterale oggetto-non c'è "prima" di proprietà.

Altri suggerimenti

Solo per divertimento questo funziona in JS 1.8.5

var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"

Questo corrisponde lo stesso ordine che si vedrebbe fare

for (o in obj) { ... }

Se volete qualcosa di provare conciso:

for (first in obj) break;

alert(first);

avvolta in funzione:

function first(obj) {
    for (var a in obj) return a;
}

non sono davvero ordinata, ma si può fare:

var first;
for (var i in obj) {
    if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
        first = obj[i];
        break;
    }
}

la .hasOwnProperty() è importante per ignorare gli oggetti la creazione del prototipo.

Questo non vi darà il primo come oggetti JavaScript non sono ordinati, ma questo va bene in alcuni casi.

myObject[Object.keys(myObject)[0]]

Per prima chiave di oggetto che si può usare

console.log(Object.keys(object)[0]);//print key's name

per il valore

console.log(object[Object.keys(object)[0]]);//print key's value

Non c'è modo di ottenere il primo elemento, visto che gli "hash" (oggetti) in JavaScript hanno proprietà non ordinate.La soluzione migliore è memorizzare le chiavi in ​​un array:

var keys = ["foo", "bar", "baz"];

Quindi usalo per ottenere il valore corretto:

object[keys[0]]

ES6

const [first] = Object.keys(obj)

Utilizzando si può usare sottolineare _.pairs per ottenere la prima voce oggetto come una coppia di valori chiave come segue:

_.pairs(obj)[0]

Quindi la chiave sarebbe disponibile con un ulteriore indice [0], il valore con [1]

Ho avuto lo stesso problema di ieri. Ho risolto in questo modo:

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.

Non è la soluzione più elegante, e sono abbastanza sicuro che si può produrre risultati diversi nei vari browser (vale a dire le specifiche dice che l'enumerazione non è tenuto a enumerare le proprietà nello stesso ordine in cui sono stati definiti). Tuttavia, ho avuto solo una singola proprietà nel mio oggetto così che era un non-problema. Avevo solo bisogno la prima chiave.

Si potrebbe fare qualcosa di simile:

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

Per ottenere la prima chiave del vostro oggetto

const myObject = {
   'foo1': { name: 'myNam1' },
   'foo2': { name: 'myNam2' }
}

const result = Object.keys(myObject)[0];

// result will return 'foo1'

In base a CMS rispondere . Non capisco il valore direttamente, invece prendo la chiave al suo indice e lo uso per ottenere il valore:

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'

La mia soluzione:

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top