Se eu tiver um objeto como:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Se eu não souber com antecedência que a lista vai até 'c', além de percorrer o objeto, há uma maneira de obter o último item do objeto (por exemplo 'carrot'
)?
Se eu tiver um objeto como:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Se eu não souber com antecedência que a lista vai até 'c', além de percorrer o objeto, há uma maneira de obter o último item do objeto (por exemplo 'carrot'
)?
Respostas:
Não. A ordem não é garantida em JSON e na maioria das outras estruturas de dados de valor-chave, portanto, o último item às vezes pode ser carrot
, outras vezes pode ser banana
e assim por diante. Se você precisa confiar em pedidos, sua melhor aposta é ir com matrizes. O poder das estruturas de dados de valor-chave reside em acessar os valores por meio deles keys
, não em ser capaz de obter o nth
item do objeto.
[]
, é realmente um objeto. JS não possui matrizes associativas como tais, matrizes têm acesso indexado e sequência; os objetos têm acesso de propriedade associativa, não sequencial.
Sim, existe uma maneira de usar Object.keys(obj)
. É explicado nesta página :
var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Se quiser obter o valor do último objeto, você pode fazer o seguinte:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
Object.keys
funciona muito bem. Só preciso encontrar uma maneira de fazê-lo funcionar no IE8 e 7, porque isso apareceu apenas no IE9.
Object.keys
várias vezes apenas para descobrir que as propriedades foram realmente ordenadas aleatoriamente. A ordem real das propriedades é diferente do que é exibido quando conectado ao console do seu navegador. Quando conectado ao console do navegador, as propriedades são reordenadas automaticamente e exibidas em ordem alfabética / numérica, o que definitivamente causa alguma confusão.
last = Object.keys(obj)[Object.keys(obj).length-1];
onde obj é o seu objeto
'c'
neste caso), mas a pergunta é formulada de uma forma que implica que quem fez a pergunta está procurando o último valor ( 'carrot'
). Isso também não acrescenta nada que já não tenha sido abordado pela resposta de Kristina Stefanova
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
for (firstProperty in myObj) { break; };
Solução usando a sintaxe de atribuição de desestruturação do ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
Quanto à ordenação das propriedades dos objetos em Javascript, irei apenas criar um link para esta resposta:
Os elementos são ordenados em um loop "for (... in ...)"
Especificamente:
Todas as implementações modernas do ECMAScript iteram por meio das propriedades do objeto na ordem em que foram definidas
Portanto, todas as outras respostas aqui estão corretas, não há uma ordem oficial garantida para as propriedades do objeto. No entanto, na prática, existe (exceto quaisquer bugs que possam, naturalmente, atrapalhar até mesmo o comportamento especificado oficialmente).
Além disso, a ordem de enumeração de fato das propriedades do objeto provavelmente será codificada em especificações futuras do EMCAScript.
Ainda assim, no momento eu não escreveria código em torno disso, principalmente porque não existem ferramentas integradas para ajudar a lidar com a ordem das propriedades do objeto. Você poderia escrever o seu próprio, mas no final você sempre estaria repetindo cada propriedade em um objeto para determinar sua posição.
Como tal, a resposta à sua pergunta é Não , não há outra maneira além de percorrer um objeto.
Use uma matriz, não um objeto literal, se a ordem for importante.
list = ['apple', 'banana', 'carrot'];
Ou algo como
dict = {
'a' : ['apple', 'awesome'],
'b' : ['best friend']
};
Ou mesmo ..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
Não dict
há garantia de que as chaves estejam em ordem.
Você pode tentar isso. Isso armazenará o último item. Aqui é necessário converter obj em array. Em seguida, use a pop()
função array que retornará o último item do array convertido.
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
As outras respostas complicam demais para mim.
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 em JavaScript . Já tem cerca de 3 anos. Essa estrutura de dados do mapa retém a ordem em que os itens são inseridos. Com esta recuperação do último item irá resultar no último item inserido no Mapa
Deixe obj
ser seu objeto. Exec:
(_ => _[Object.keys(_).pop()])( obj )
se você quer dizer obter a última chave em ordem alfabética, você pode (garantido):
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'