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


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

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

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

10 73

10 ответов:

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

Да, есть способ с помощью 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)[Object.keys(fruitObject).length - 1]] // "carrot"
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";

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

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

где obj-это объект

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

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

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

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

или даже..

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

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

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

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

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

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

в частности:

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

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

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

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

Как таковой ответ на ваш вопрос нет, нет никакого способа, кроме зацикливания через объект.

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'

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

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

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