Conseguir el primer índice de un objeto
-
05-09-2019 - |
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.
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));