Если у меня есть такой массив:
var arr = ['one','two','three'];
Я могу получить доступ к разным частям, выполнив следующие действия:
console.log(arr[1]);
Как я могу получить доступ к свойствам объекта по их порядку, а не по ключу?
Пример:
var obj = {
'something' : 'awesome',
'evenmore' : 'crazy'
},
jbo = {
'evenmore' : 'crazy',
'something' : 'awesome'
};
Как мне получить первое свойство для каждого объекта - «что-то» obj
и «даже больше» - jbo
без явного использования имени свойства?
Некоторые из вас, кажется, думают, что я ищу что-то вроде:
console.log(obj['something']);
Это не так, я специально хочу настроить таргетинг на индекс, как и в первом примере, если это возможно.
javascript
arrays
Дэрил
источник
источник
Ответы:
Нет, это невозможно.
Самое близкое, что вы можете получить, - это получить массив ключей объекта и использовать его:
var keys = Object.keys( obj );
... но нет гарантии, что ключи будут возвращены в указанном вами порядке. Так что это может выглядеть так:
keys[ 0 ]; // 'evenmore' keys[ 1 ]; // 'something'
источник
Object.keys()
можно было бы надежно использовать, если бы вы знали содержимое объекта. Подробнее здесь: stackoverflow.com/questions/280713/…Единственный способ, которым я могу это сделать, - это создать метод, который дает вам свойство using
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
источник
return this[Object.keys(this)[n]];
чтобы сделать его универсальным.Вы можете использовать этот
Object.values()
метод, если не хотите использоватьObject.keys()
.В отличие от
Object.keys()
метода, который возвращает массив перечисляемых свойств данного объекта, например:const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.keys(object1));
Распечатал бы следующий массив:
[ 'a', 'b', 'c' ]
Object.values()
Метод возвращает массив собственного перечислимого имущества данного объекта вvalues
.Итак, если у вас есть тот же объект, но вместо этого используйте значения,
const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.values(object1));
Вы получите следующий массив:
[ 'somestring', 42, false ]
Итак, если вы хотите получить доступ
object1.b
, но вместо этого используя индекс, вы можете использовать:Object.values(object1)[1] === 42
Вы можете узнать больше об этом методе здесь .
источник
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)
Редактировать:
На самом деле «индекс» - это ключ. Если вы хотите сохранить положение ключа, вам необходимо создать специальный объект для обработки этого.
источник
с помощью jquery вы можете сделать это:
var arr = $.map(obj,function(value, key) { return value; }); alert(obj[0]);
источник
Получите массив ключей, переверните его, затем запустите цикл
var keys = Object.keys( obj ).reverse(); for(var i = 0; i < keys.length; i++){ var key = keys[i]; var value = obj[key]; //do stuff backwards }
источник
вы можете создать массив, заполненный полями вашего объекта, и использовать индекс в массиве и получить доступ к свойствам объекта с помощью этого
propertiesName:['pr1','pr2','pr3'] this.myObject[this.propertiesName[0]]
источник
Я пошел дальше и сделал для вас функцию:
Object.prototype.getValueByIndex = function (index) { /* Object.getOwnPropertyNames() takes in a parameter of the object, and returns an array of all the properties. In this case it would return: ["something","evenmore"]. So, this[Object.getOwnPropertyNames(this)[index]]; is really just the same thing as: this[propertyName] */ return this[Object.getOwnPropertyNames(this)[index]]; }; let obj = { 'something' : 'awesome', 'evenmore' : 'crazy' }; console.log(obj.getValueByIndex(0)); // Expected output: "awesome"
источник
Если вы не уверены, что 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]])
источник