Есть ли элегантный способ доступа к первому свойству объекта ...
- где вы не знаете название вашей недвижимости
- без использования цикла, как
for .. in
или JQuery's$.each
Например, мне нужно получить доступ к foo1
объекту, не зная имени foo1:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
javascript
object
atogle
источник
источник
Ответы:
Используя это, вы можете получить доступ и к другим свойствам по индексам. Будьте внимательны!
Object.keys
возврат заказа не гарантируется в соответствии с ECMAScript, однако неофициально это происходит во всех основных реализациях браузеров, пожалуйста, прочитайте https://stackoverflow.com/a/23202095 для подробностей об этом.источник
first()
что-то подобное могло справиться с этим.Попробуйте
for … in
цикл и остановитесь после первой итерации:источник
Вы также можете сделать
Object.values(example)[0]
.источник
Object.keys
, потому что вы гарантированно получите первый товар.Используется
Object.keys
для получения массива свойств объекта. Пример:Документация и кросс-браузерная прокладка предоставлены здесь . Пример его использования можно найти в другом из моих ответов здесь .
Изменить : для ясности, я просто хочу повторить то, что было правильно указано в других ответах: порядок ключей в объектах JavaScript не определен.
источник
Версия с одним правилом:
источник
for in
без проверки, такhasOwnProperty
как объект содержит другие нежелательные значения, добавленные к нему программным способом, так что вы можете получить нежелательный результат из этого фрагмента. Тот факт, что он короткий и аккуратный, не означает его оптимальную безопасностьНе существует "первого" свойства. Ключи объектов неупорядочены.
Если вы зациклите их с помощью for,
(var foo in bar)
вы получите их в некотором порядке, но это может измениться в будущем (особенно если вы добавите или удалите другие ключи).источник
Решение с библиотекой lodash :
но нет никакой гарантии порядка внутреннего хранения свойств объекта, потому что это зависит от реализации виртуальной машины Java.
источник
var object = { childIndex: { .. } }; var childObject = _.find(Object);
Нет. Объектный литерал, как определено MDC :
Следовательно, литерал объекта не является массивом, и вы можете получить доступ к свойствам только с помощью их явного имени или
for
цикла с помощьюin
ключевого слова.источник
Верхний ответ может генерировать весь массив, а затем захватывать из списка. Вот еще один эффективный ярлык
источник
Это было рассмотрено здесь раньше.
Концепция first не применяется к свойствам объекта, и порядок цикла for ... in не гарантируется спецификациями, однако на практике это надежно FIFO, за исключением критически важного для chrome ( отчет об ошибках ). Принимайте свои решения соответственно.
источник
Я не рекомендую вам использовать Object.keys, поскольку он не поддерживается в старых версиях IE. Но если вам это действительно нужно, вы можете использовать приведенный выше код, чтобы гарантировать обратную совместимость:
Особенность Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5
Дополнительная информация: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
Но если вам нужен только первый, мы могли бы предложить более короткое решение, например:
источник
Чтобы получить первое имя ключа в объекте, вы можете использовать:
Возвращает строку, поэтому вы не можете получить доступ к вложенным объектам, если они есть, например:
var obj = { first: { someVal : { id : 1} };
Здесь с этим решением вы не можете получить доступ к идентификатору.Лучшее решение, если вы хотите получить реальный объект, это использовать lodash, например:
Чтобы вернуть значение первого ключа (если вы не знаете точно имя первого ключа):
если вы знаете имя ключа, просто используйте:
или
источник
Если вам нужен доступ к «первому свойству объекта», это может означать, что с вашей логикой что-то не так. Порядок свойств объекта не должен иметь значения.
источник
Используйте массив вместо объекта (квадратные скобки).
Обратите внимание, что вы теряете идентификаторы 'foo'. Но вы можете добавить свойство name к содержащимся объектам:
источник
Есть ли причина не делать этого?
источник
.map()
существует только для встроенных итерацийВы можете использовать
Object.prototype.keys
который возвращает все ключи объекта в том же порядке. Поэтому, если вы хотите первый объект, просто получите этот массив и используйте первый элемент в качестве желаемого ключа.источник
мы также можем сделать с этим подходом.
источник
Вот более чистый способ получения первого ключа:
источник
[first]
. Пользователь не запросил массив в качестве ответа. Зачем делать то,first = Object.keys(example)[0]
что будет делать то же самое без необходимости заключать ответ в массив. Почему ваш чище, пожалуйста?