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'
)?
javascript
object
sprugman
fonte
fonte
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 serbanana
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 deleskeys
, não em ser capaz de obter onth
item do objeto.fonte
[]
, é 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 :Se quiser obter o valor do último objeto, você pode fazer o seguinte:
fonte
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.onde obj é o seu objeto
fonte
'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 Stefanovafonte: http://javascriptweblog.wordpress.com
fonte
for (firstProperty in myObj) { break; };
Solução usando a sintaxe de atribuição de desestruturação do ES6:
fonte
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:
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.
fonte
Use uma matriz, não um objeto literal, se a ordem for importante.
Ou algo como
Ou mesmo ..
Não
dict
há garantia de que as chaves estejam em ordem.fonte
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.fonte
As outras respostas complicam demais para mim.
fonte
fonte
Você também pode usar o
Object.values()
método:fonte
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
fonte
Deixe
obj
ser seu objeto. Exec:fonte
se você quer dizer obter a última chave em ordem alfabética, você pode (garantido):
fonte