Если у меня есть объект вроде:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Если я не знаю заранее, что список идет вверх до 'c', кроме цикла по объекту, есть ли способ получить последний элемент в объекте (например 'carrot')?
Если у меня есть объект вроде:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Если я не знаю заранее, что список идет вверх до 'c', кроме цикла по объекту, есть ли способ получить последний элемент в объекте (например 'carrot')?
Ответы:
Номер заказа не гарантируется в формате 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…)"
В частности:
Все современные реализации ECMAScript перебирают свойства объекта в том порядке, в котором они были определены.
Таким образом, любой другой ответ здесь правильный, нет официального гарантированного порядка для свойств объекта. Однако на практике есть (за исключением любых ошибок, которые, естественно, могут испортить даже официально оговоренное поведение).
Более того, фактический порядок перечисления свойств объекта, вероятно, будет кодифицирован в будущих спецификациях 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'
Объект карты в 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'