Si tengo un objeto como:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Si no sé de antemano que la lista sube a 'c', además de recorrer el objeto, ¿hay alguna forma de obtener el último elemento del objeto (por ejemplo 'carrot'
)?
Si tengo un objeto como:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Si no sé de antemano que la lista sube a 'c', además de recorrer el objeto, ¿hay alguna forma de obtener el último elemento del objeto (por ejemplo 'carrot'
)?
Respuestas:
No. El orden no está garantizado en JSON y la mayoría de las otras estructuras de datos de valor-clave, por lo tanto, el último elemento a veces podría ser carrot
y en otras ocasiones, banana
y así sucesivamente. Si necesita confiar en los pedidos, su mejor opción es ir con matrices. El poder de las estructuras de datos clave-valor radica en acceder a los valores por su keys
, no en poder obtener el nth
elemento del objeto.
[]
, es realmente un objeto. JS no tiene matrices asociativas como tales, las matrices tienen acceso y secuencia indexados; los objetos tienen acceso de propiedad asociativa, no secuencial.
Sí, hay una forma de usar Object.keys(obj)
. Se explica en esta página :
var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Si desea obtener el valor del último objeto, puede hacer esto:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
Object.keys
funciona de maravilla. Solo tengo que encontrar una manera de que funcione en IE8 y 7, porque eso se mostró solo en IE9.
Object.keys
una y otra vez solo para descubrir que las propiedades estaban ordenadas al azar. El orden de propiedad real es diferente de lo que se muestra cuando se registra en la consola de su navegador. Cuando se inicia sesión en la consola del navegador, las propiedades se reordenan automáticamente y se muestran alfabéticamente / numéricamente, lo que definitivamente causa cierta confusión.
last = Object.keys(obj)[Object.keys(obj).length-1];
donde obj es tu objeto
'c'
en este caso) pero la pregunta está redactada de una manera que implica que el autor de la pregunta está buscando el último valor ( 'carrot'
). Esto tampoco agrega nada que no esté cubierto por la respuesta de Kristina Stefanova
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
for (firstProperty in myObj) { break; };
Solución utilizando la sintaxis de asignación de desestructuración de ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
En cuanto al orden de las propiedades del objeto en Javascript, solo vincularé a esta respuesta:
Orden de los elementos en un bucle "for (... in ...)"
Específicamente:
Todas las implementaciones modernas de ECMAScript iteran a través de las propiedades del objeto en el orden en que fueron definidas
Entonces, todas las demás respuestas aquí son correctas, no hay un orden oficial garantizado para objetar propiedades. Sin embargo, en la práctica lo hay (salvo cualquier error que, naturalmente, pueda arruinar incluso el comportamiento establecido en piedra oficialmente especificado).
Además, es probable que el orden de enumeración de facto de las propiedades de los objetos se codifique en futuras especificaciones de EMCAScript.
Aún así, en este momento no escribiría código sobre esto, principalmente porque no hay herramientas integradas para ayudar a lidiar con el orden de las propiedades de los objetos. Podrías escribir el tuyo propio, pero al final siempre estarías recorriendo cada propiedad en un objeto para determinar su posición.
Como tal, la respuesta a su pregunta es No , no hay forma más que recorrer un objeto.
Use una matriz, no un objeto literal, si el orden importa.
list = ['apple', 'banana', 'carrot'];
O algo como
dict = {
'a' : ['apple', 'awesome'],
'b' : ['best friend']
};
O incluso..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
dict
No se garantiza en absoluto que las claves estén en orden.
Puedes probar esto. Esto almacenará el último artículo. Aquí es necesario convertir obj en una matriz. Luego use la pop()
función de matriz que devolverá el último elemento de la matriz convertida.
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
Las otras respuestas me lo complican demasiado.
let animals = {
a: 'dog',
b: 'cat',
c: 'bird'
}
let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]
JSArray = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c'
document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot'
Objeto de mapa en JavaScript . Esto ya tiene unos 3 años. Esta estructura de datos de mapa conserva el orden en que se insertan los elementos. Con esta recuperación, el último elemento dará como resultado el último elemento insertado en el mapa
Deja que obj
sea tu objeto. Ejecutivo:
(_ => _[Object.keys(_).pop()])( obj )
si te refieres a obtener la última clave alfabéticamente, puedes (garantizado):
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var keys = Object.keys(obj);
keys.sort();
var lastkey = keys.pop() // c
var lastvalue = obj[lastkey] // 'carrot'