¿Existe una manera elegante de acceder a la primera propiedad de un objeto ...
- donde no sabes el nombre de tus propiedades
- sin usar un bucle como
for .. in
o jQuery$.each
Por ejemplo, necesito acceder al foo1
objeto sin saber el nombre de foo1:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
javascript
object
atogle
fuente
fuente
Respuestas:
Con esto, también puede acceder a otras propiedades por índices. ¡Ten cuidado!
Object.keys
el pedido de devolución no está garantizado según ECMAScript; sin embargo, de manera extraoficial se encuentra en todas las implementaciones de navegadores principales, lea https://stackoverflow.com/a/23202095 para obtener más información al respecto.fuente
first()
o algo similar podría manejar esto.Pruebe el
for … in
ciclo y rompa después de la primera iteración:fuente
También puedes hacer
Object.values(example)[0]
.fuente
Object.keys
, porque tienes garantizado que obtendrás el primer artículo.Se usa
Object.keys
para obtener una matriz de las propiedades de un objeto. Ejemplo:Documentación y shim entre navegadores provistos aquí . Un ejemplo de su uso se puede encontrar en otra de mis respuestas aquí .
Editar : para mayor claridad, solo quiero hacer eco de lo que se dijo correctamente en otras respuestas: el orden de las claves en los objetos de JavaScript no está definido.
fuente
Una versión de una regla:
fuente
for in
sin verificarlo,hasOwnProperty
ya que el objeto contiene otros valores no deseados agregados programáticamente para que pueda obtener un resultado no deseado de este fragmento. El hecho de que sea corto y ordenado no significa que sea óptimo de forma segura.No hay una "primera" propiedad. Las claves de objeto no están ordenadas.
Si los repite
(var foo in bar)
, los obtendrá en algún orden, pero puede cambiar en el futuro (especialmente si agrega o elimina otras claves).fuente
Solución con la biblioteca lodash :
pero no hay garantía del orden de almacenamiento interno de las propiedades del objeto porque depende de la implementación de la máquina virtual javascript.
fuente
var object = { childIndex: { .. } }; var childObject = _.find(Object);
No. Un objeto literal, como lo define MDC es:
Por lo tanto, un objeto literal no es una matriz, y solo puede acceder a las propiedades con su nombre explícito o un
for
bucle con lain
palabra clave.fuente
La respuesta principal podría generar toda la matriz y luego capturarla de la lista. Aquí hay otro atajo efectivo
fuente
Esto ha sido cubierto aquí antes.
El concepto de primero no se aplica a las propiedades de los objetos, y el orden de un bucle for ... in no está garantizado por las especificaciones, sin embargo, en la práctica, es confiable FIFO excepto críticamente para Chrome ( informe de error ). Tome sus decisiones en consecuencia.
fuente
No le recomiendo que use Object.keys ya que no es compatible con versiones antiguas de IE. Pero si realmente lo necesita, puede usar el código anterior para garantizar la compatibilidad con la parte posterior:
Característica Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5
Más información: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
Pero si solo necesita el primero, podríamos organizar una solución más corta como:
fuente
Para obtener el primer nombre clave en el objeto, puede usar:
Devuelve una cadena, por lo que no puede acceder a objetos anidados si hubiera, como:
var obj = { first: { someVal : { id : 1} };
Aquí con esa solución no puede acceder a la identificación.La mejor solución si desea obtener el objeto real es usar lodash como:
Para devolver el valor de la primera clave (si no sabe exactamente el nombre de la primera clave):
si conoce el nombre de la clave, simplemente use:
o
fuente
Si necesita acceder a "la primera propiedad de un objeto", puede significar que hay algo mal con su lógica. El orden de las propiedades de un objeto no debería importar.
fuente
Use una matriz en lugar de un objeto (corchetes).
Tenga en cuenta que pierde los identificadores 'foo'. Pero podría agregar una propiedad de nombre a los objetos contenidos:
fuente
¿Alguna razón para no hacer esto?
fuente
.map()
solo existe para iterablesPuede usar
Object.prototype.keys
cual devuelve todas las claves de un objeto en el mismo orden. Entonces, si desea el primer objeto, simplemente obtenga esa matriz y use el primer elemento como clave deseada.fuente
También podemos hacer con este enfoque.
fuente
Aquí hay una forma más limpia de obtener la primera clave:
fuente
[first]
. El usuario no solicitó una matriz como respuesta. ¿Por qué hacer esto sobre lofirst = Object.keys(example)[0]
que hará lo mismo sin necesidad de ajustar la respuesta en una matriz? ¿Por qué el tuyo es más limpio, por favor?