Подтвердить что ты не робот

Доступ к нечисловым свойствам объекта по индексу?

Если у меня есть такой массив:

var arr = ['one','two','three'];

Я могу получить доступ к различным частям, выполнив следующие действия:

console.log(arr[1]);

Как я могу получить доступ к свойствам объекта по их порядку, а не по ключу?

Пример:

var obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
},
jbo = {
    'evenmore'  : 'crazy',
    'something' : 'awesome'
};

Как мне получить первое свойство для каждого объекта - "нечто" из obj и "evenmore" из jbo - без явного использования имени свойства?

Теперь некоторые из вас, кажется, думают, что я за чем-то вроде:

console.log(obj['something']);

Это не тот случай, я специально нацелен на индекс, как и в первом примере - если это возможно.

4b9b3361

Ответ 1

"Я специально планирую нацелить индекс, как и на первый пример - если это возможно".

Нет, это невозможно.

Самое близкое, что вы можете получить, это получить массив ключей объектов и использовать его:

var keys = Object.keys( obj );

... но нет гарантии, что ключи будут возвращены в указанном вами порядке. Таким образом, это может выглядеть так:

keys[ 0 ];  // 'evenmore'
keys[ 1 ];  // 'something'

Ответ 2

Единственный способ, которым я могу это сделать, - создать метод, который дает вам свойство с помощью Object.keys();.

var obj = {
    dog: "woof",
    cat: "meow",
    key: function(n) {
        return this[Object.keys(this)[n]];
    }
};
obj.key(1); // "meow"

Демо: http://jsfiddle.net/UmkVn/

Можно было бы распространить это на все объекты с помощью Object.prototype;, но это обычно не рекомендуется.

Вместо этого используйте вспомогательный элемент функции:

var object = {
  key: function(n) {
    return this[ Object.keys(this)[n] ];
  }
};

function key(obj, idx) {
  return object.key.call(obj, idx);
}

key({ a: 6 }, 0); // 6

Ответ 3

var obj = {
    'key1':'value',
    '2':'value',
    'key 1':'value'
}

console.log(obj.key1)
console.log(obj['key1'])
console.log(obj['2'])
console.log(obj['key 1'])

// will not work
console.log(obj.2)

Edit:

"Я специально планирую нацелить индекс, как и на первый пример - если это возможно".

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

Ответ 4

Если вы не уверены, что Object.keys() вернет вам ключи в правильном порядке, вы можете попробовать эту логику вместо

var keys = []
var obj = {
    'key1' : 'value1',
    'key2' : 'value2',
    'key3' : 'value3',
}
for (var key in obj){
    keys.push(key)
}
console.log(obj[keys[1]])
console.log(obj[keys[2]])
console.log(obj[keys[3]])

Ответ 5

jquery вы можете сделать это:

var arr = $.map(obj,function(value, key) {
    return value;
});
alert(obj[0]);