Получение первого индекса объекта
-
05-09-2019 - |
Вопрос
Учитывать:
var object = {
foo: {},
bar: {},
baz: {}
}
Как бы я это сделал:
var first = object[0];
console.log(first);
Очевидно, это не работает, потому что первый индекс называется foo
, нет 0
.
console.log(object['foo']);
работает, но я не знаю, что это называется foo.Его можно было назвать как угодно.Я просто хочу первого.
Решение
Если порядок объектов важен, вам следует изменить схему JSON, чтобы хранить объекты в массиве:
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
или, может быть:
[
["foo", {}],
["bar", {}],
["baz", {}]
]
Как отмечает Бен Альперт, свойства объектов Javascript неупорядочены, и ваш код не работает, если вы ожидаете, что они будут перечисляться в том же порядке, в котором они указаны в литерале объекта — «первого» свойства не существует.
Другие советы
Просто ради интереса это работает в JS 1.8.5.
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
Это соответствует тому же порядку, который вы увидите при выполнении
for (o in obj) { ... }
Если вы хотите что-то краткое, попробуйте:
for (first in obj) break;
alert(first);
завернутый как функция:
function first(obj) {
for (var a in obj) return a;
}
они не Действительно заказал, но можно сделать:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
тот .hasOwnProperty()
важно игнорировать прототипированные объекты.
Это не даст вам первого, поскольку объекты javascript неупорядочены, однако в некоторых случаях это нормально.
myObject[Object.keys(myObject)[0]]
для первого ключа объекта вы можете использовать
console.log(Object.keys(object)[0]);//print key's name
по стоимости
console.log(object[Object.keys(object)[0]]);//print key's value
Невозможно получить первый элемент, поскольку «хеши» (объекты) в JavaScript имеют неупорядоченные свойства.Лучше всего хранить ключи в массиве:
var keys = ["foo", "bar", "baz"];
Затем используйте это, чтобы получить правильное значение:
object[keys[0]]
ES6
const [first] = Object.keys(obj)
Используя подчеркивание, вы можете использовать _.pairs, чтобы получить первую запись объекта в виде пары ключ-значение следующим образом:
_.pairs(obj)[0]
Тогда ключ будет доступен с дальнейшим [0]
нижний индекс, значение с [1]
Вчера у меня была такая же проблема.Я решил это так:
var obj = {
foo:{},
bar:{},
baz:{}
},
first = null,
key = null;
for (var key in obj) {
first = obj[key];
if(typeof(first) !== 'function') {
break;
}
}
// first is the first enumerated property, and key it's corresponding key.
Не самое элегантное решение, и я почти уверен, что оно может давать разные результаты в разных браузерах (т.е.в спецификации сказано, что перечисление не требуется для перечисления свойств в том же порядке, в котором они были определены).Однако у моего объекта было только одно свойство, так что это не было проблемой.Мне просто нужен был первый ключ.
Вы можете сделать что-то вроде этого:
var object = {
foo:{a:'first'},
bar:{},
baz:{}
}
function getAttributeByIndex(obj, index){
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return null;
}
var first = getAttributeByIndex(object, 0); // returns the value of the
// first (0 index) attribute
// of the object ( {a:'first'} )
Чтобы получить первый ключ вашего объекта
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'
На основе система управления контентом отвечать.Я не получаю значение напрямую, вместо этого я беру ключ по его индексу и использую его для получения значения:
Object.keyAt = function(obj, index) {
var i = 0;
for (var key in obj) {
if ((index || 0) === i++) return key;
}
};
var obj = {
foo: '1st',
bar: '2nd',
baz: '3rd'
};
var key = Object.keyAt(obj, 1);
var val = obj[key];
console.log(key); // => 'bar'
console.log(val); // => '2nd'
Мое решение:
Object.prototype.__index = function(index)
{
var i = -1;
for (var key in this)
{
if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
++i;
if (i >= index)
return this[key];
}
return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));