Pregunta

Considere lo siguiente:

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

¿Cómo voy a hacer esto:

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

Obviamente, que no funciona debido a que el primer índice se denomina foo, No 0.

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

funciona, pero no sé que ha llamado fu. Podría tener cualquier nombre. Sólo quiero que el primero.

¿Fue útil?

Solución

Si el orden de los objetos es importante, usted debe revisar su esquema JSON para almacenar los objetos en una matriz:

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

o tal vez:

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

Como Ben Alpert señala, propiedades de los objetos de Javascript no están ordenados, y su código se interrumpe cuando se espera que se enumeran en el mismo orden en que se especifican en el objeto literal-no hay una "primera" propiedad.

Otros consejos

Sólo por diversión que esto funciona en JS 1.8.5

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

Esto coincide con el mismo orden en que se vería haciendo

for (o in obj) { ... }

Si quieres algo intento concisa:

for (first in obj) break;

alert(first);

envuelto como una función:

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

no son realmente ordenada, pero se puede hacer:

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

la .hasOwnProperty() es importante hacer caso omiso de los objetos prototipos.

Esto no le dará el primero como JavaScript objetos no están ordenados, sin embargo, esto está muy bien en algunos casos.

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

En primera clave de objeto que se puede utilizar

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

para el valor

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

No hay manera de conseguir el primer elemento, ya que "hash" (objetos) en JavaScript tienen propiedades desordenadas. Su mejor apuesta es para almacenar las claves en una matriz:

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

A continuación, la use para obtener el valor adecuado:

object[keys[0]]

ES6

const [first] = Object.keys(obj)

Uso de relieve que se pueden utilizar _.pairs para conseguir la primera entrada del objeto como un par de valores clave de la siguiente manera:

_.pairs(obj)[0]

A continuación, la clave estaría disponible con un subíndice más [0], el valor con [1]

Ayer tuve el mismo problema. Lo resuelto de esta manera:

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.

No es la solución más elegante, y estoy bastante seguro de que puede producir diferentes resultados en diferentes navegadores (es decir, las especificaciones dice que la enumeración no es necesario enumerar las propiedades en el mismo orden en que fueron definidos). Sin embargo, tan sólo tuviera una sola propiedad en mi objeto de modo que no era un problema. Sólo necesitaba la primera clave.

Se podría hacer algo como esto:

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

Para obtener la primera clave de su objeto

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

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

// result will return 'foo1'

CMS responder. No entiendo el valor directamente, en vez tomo la llave en su índice y utilizar esto para conseguir el valor:

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'

Mi solución:

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));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top