получить последний элемент в объекте JavaScript - PullRequest
78 голосов
/ 30 ноября 2010

Если у меня есть такой объект, как:

{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }

Если я не знаю заранее, что список идет до «с», кроме как проходить по объекту, есть ли способ получить последний элемент в объекте (например, 'carrot')?

Ответы [ 11 ]

179 голосов
/ 16 мая 2013

Да, есть способ использования Object.keys(obj).Это объясняется в этой странице :

var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]

Если вы хотите получить значение последнего объекта, вы можете сделать это:

fruitObject[Object.keys(fruitObject).length-1] // "carrot"
56 голосов
/ 30 ноября 2010

Нет.Порядок не гарантируется в JSON и большинстве других структур данных ключ-значение, поэтому последний элемент может иногда иметь значение carrot, а иногда - banana и т. Д.Если вам нужно , чтобы полагаться на порядок, лучше всего использовать массивы.Сила структур данных ключ-значение заключается в доступе к значениям по их keys, а не в возможности получить элемент nth объекта.

16 голосов
/ 07 февраля 2014
last = Object.keys(obj)[Object.keys(obj).length-1];

где obj - ваш объект

12 голосов
/ 31 августа 2012
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";

Источник: http://javascriptweblog.wordpress.com

7 голосов
/ 28 сентября 2017

Решение с использованием синтаксиса назначения деструктурирования ES6:

var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
5 голосов
/ 30 ноября 2010

Что касается упорядочения свойств объекта в Javascript, я просто сошлюсь на этот ответ:

Порядок элементов в цикле «for (… in…)»

В частности:

Все современные реализации ECMAScript перебирает объект свойства в том порядке, в котором они были определены

Таким образом, все остальные ответы здесь верны, нет официального гарантированного заказа на свойства объекта. Однако на практике это есть (исключая любые ошибки, которые, естественно, могут испортить даже официально заданное поведение).

Кроме того, фактический порядок перечисления свойств объекта, вероятно, будет кодифицирован в будущих спецификациях EMCAScript.

Тем не менее, в настоящее время я не буду писать код вокруг этого, в основном потому, что нет встроенных инструментов, помогающих справиться с порядком свойств объекта. Вы можете написать свое собственное, но в конце вы всегда будете циклически проходить по каждому свойству объекта, чтобы определить его положение.

Таким образом, ответ на ваш вопрос Нет , кроме петли через объект, нет никакого способа.

5 голосов
/ 30 ноября 2010

Используйте массив, а не литерал объекта, если порядок имеет значение.

list = ['apple', 'banana', 'carrot'];

Или что-то вроде

dict = {
 'a' : ['apple', 'awesome'],
 'b' : ['best friend']
};

Или даже ..

dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];

Клавиши для dict совсем не гарантированы в порядке.

3 голосов
/ 07 марта 2014
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'
1 голос
/ 10 августа 2018

Вы также можете использовать метод Object.values():

Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
0 голосов
/ 06 декабря 2018

Пусть obj будет вашим объектом. Exec:

(_ => _[Object.keys(_).pop()])( obj )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...