Подтвердить что ты не робот

Получение последнего элемента в объекте javascript

Если у меня есть объект вроде:

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

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

4b9b3361

Ответ 1

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

Ответ 2

Да, есть способ использовать 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"

Ответ 3

last = Object.keys(obj)[Object.keys(obj).length-1];

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

Ответ 5

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

var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"

Ответ 6

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

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

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

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

Или даже..

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

Ключи для dict не гарантируются в порядке.

Ответ 7

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

Порядок элементов в "for (... in...)" цикл

В частности:

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

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

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

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

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

Ответ 8

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'

Ответ 9

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

Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"

Ответ 10

Объект карты в JavaScript , Это уже около трех лет. Эта структура данных карты сохраняет порядок вставки элементов. При этом извлечении последнего элемента на самом деле будет получен последний элемент, вставленный в Map

Ответ 11

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

(_ => _[Object.keys(_).pop()])( obj )

Ответ 12

если вы хотите получить последний ключ в алфавитном порядке, вы можете (гарантировано):

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'