Если у меня есть объект вроде:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Если я не знаю заранее, что список идет вверх до 'c', кроме цикла по объекту, есть ли способ получить последний элемент в объекте (например 'carrot'
)?
javascript
object
спругман
источник
источник
Ответы:
Номер заказа не гарантируется в формате JSON и большинства других структур данных ключ-значение, поэтому поэтому последний пункт может быть иногда
carrot
и в другое время бытьbanana
и так далее. Если вам нужно полагаться на порядок, лучше всего использовать массивы. Сила структур данных "ключ-значение" заключается в доступе к значениям по нимkeys
, а не в возможности получитьnth
элемент объекта.источник
[]
это действительно объект. JS не имеет ассоциативных массивов как таковых, массивы имеют индексированный доступ и последовательность; объекты имеют ассоциативный доступ к свойствам, непоследовательный.Да, есть способ использовать
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"
источник
Object.keys
отлично работает. Просто нужно найти способ заставить его работать в IE8 и 7, потому что это проявилось только в IE9.Object.keys
снова и снова, только чтобы обнаружить, что свойства на самом деле были упорядочены случайным образом. Фактический порядок свойств отличается от того, что отображается при входе в консоль вашего браузера. При входе в консоль браузера свойства автоматически переупорядочиваются и отображаются в алфавитном / цифровом порядке, что определенно вызывает некоторую путаницу.last = Object.keys(obj)[Object.keys(obj).length-1];
где obj - ваш объект
источник
'c'
в данном случае), но вопрос сформулирован таким образом, что подразумевает, что спрашивающий ищет последнее значение ('carrot'
). Это также не добавляет ничего, что еще не было охвачено ответом Кристины Стефановойvar myObj = {a: 1, b: 2, c: 3}, lastProperty; for (lastProperty in myObj); lastProperty; //"c";
источник: http://javascriptweblog.wordpress.com
источник
for (firstProperty in myObj) { break; };
Решение с использованием синтаксиса деструктурирующего присваивания ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var { [Object.keys(temp).pop()]: lastItem } = temp; console.info(lastItem); //"carrot"
источник
Вы можете попробовать это. Это сохранит последний элемент. Здесь нужно преобразовать obj в массив. Затем используйте
pop()
функцию массива , которая вернет последний элемент из преобразованного массива.var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var last = Object.keys(obj).pop(); console.log(last); console.log(obj[last]);
источник
Что касается порядка свойств объекта в Javascript, я просто дам ссылку на этот ответ:
Порядок элементов в цикле "for (… in…)"
В частности:
Таким образом, любой другой ответ здесь правильный, нет официального гарантированного порядка для свойств объекта. Однако на практике есть (за исключением любых ошибок, которые, естественно, могут испортить даже официально оговоренное поведение).
Более того, фактический порядок перечисления свойств объекта, вероятно, будет кодифицирован в будущих спецификациях EMCAScript.
Тем не менее, в настоящее время я бы не стал писать код вокруг этого, в основном потому, что нет встроенных инструментов, помогающих справиться с порядком свойств объекта. Вы можете написать свое собственное, но в конце концов вы всегда будете перебирать каждое свойство в объекте, чтобы определить его положение.
Таким образом, ответ на ваш вопрос: нет , кроме цикла по объекту нет другого пути.
источник
Если порядок имеет значение, используйте массив, а не литерал объекта.
list = ['apple', 'banana', 'carrot'];
Или что-то вроде
dict = { 'a' : ['apple', 'awesome'], 'b' : ['best friend'] };
Или даже..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
dict
Не гарантируется, что ключи для находятся в порядке.источник
Другие ответы слишком усложняют для меня.
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'
источник
Вы также можете использовать
Object.values()
метод:Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
источник
Объект карты в JavaScript . Этому уже около 3 лет. Эта структура данных карты сохраняет порядок, в котором вставляются элементы. При этом извлечение последнего элемента фактически приведет к тому, что последний элемент будет вставлен на карту.
источник
Пусть
obj
будет твоей целью. Exec:(_ => _[Object.keys(_).pop()])( obj )
источник
если вы имеете в виду получить последний ключ по алфавиту, вы можете (гарантированно):
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'
источник