Jika saya memiliki array seperti ini:
var arr = ['one','two','three'];
Saya dapat mengakses bagian yang berbeda dengan melakukan ini:
console.log(arr[1]);
Bagaimana cara mengakses properti objek berdasarkan urutannya, bukan berdasarkan kunci?
Contoh:
var obj = {
'something' : 'awesome',
'evenmore' : 'crazy'
},
jbo = {
'evenmore' : 'crazy',
'something' : 'awesome'
};
Bagaimana saya mendapatkan properti pertama untuk setiap objek– "sesuatu" dari obj
dan "bahkan lebih" dari jbo
–tanpa menggunakan nama properti secara eksplisit?
Sekarang, beberapa dari Anda sepertinya berpikir saya mencari sesuatu seperti:
console.log(obj['something']);
Ini bukan masalahnya, saya secara khusus ingin menargetkan indeks, seperti contoh pertama - jika memungkinkan.
javascript
arrays
daryl
sumber
sumber
Jawaban:
Tidak, itu tidak mungkin.
Yang paling dekat yang bisa Anda dapatkan adalah mendapatkan Array dari kunci objek, dan menggunakannya:
var keys = Object.keys( obj );
... tetapi tidak ada jaminan bahwa kunci akan dikembalikan dalam urutan yang Anda tentukan. Jadi itu bisa berakhir seperti:
keys[ 0 ]; // 'evenmore' keys[ 1 ]; // 'something'
sumber
Object.keys()
dapat digunakan dengan andal jika Anda mengetahui konten objek. Lebih detail di sini: stackoverflow.com/questions/280713/…Satu-satunya cara yang dapat saya pikirkan untuk melakukan ini adalah dengan membuat metode yang memberi Anda properti yang digunakan
Object.keys();
.var obj = { dog: "woof", cat: "meow", key: function(n) { return this[Object.keys(this)[n]]; } }; obj.key(1); // "meow"
Demo: http://jsfiddle.net/UmkVn/
Ini akan memungkinkan untuk memperluas ini ke semua objek menggunakan
Object.prototype;
tetapi itu biasanya tidak disarankan.Sebagai gantinya, gunakan pembantu fungsi:
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
sumber
return this[Object.keys(this)[n]];
untuk membuatnya generik.Anda dapat menggunakan
Object.values()
metode ini jika Anda tidak ingin menggunakanObject.keys()
.Berbeda dengan
Object.keys()
metode yang mengembalikan array dari properti enumerable objek tertentu, jadi misalnya:const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.keys(object1));
Akan mencetak array berikut:
[ 'a', 'b', 'c' ]
The
Object.values()
Metode mengembalikan array properti enumerable objek diberikan sendirivalues
.Jadi, jika Anda memiliki objek yang sama tetapi menggunakan nilai,
const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.values(object1));
Anda akan mendapatkan array berikut:
[ 'somestring', 42, false ]
Jadi jika Anda ingin mengakses
object1.b
, tetapi menggunakan indeks, Anda dapat menggunakan:Object.values(object1)[1] === 42
Anda dapat membaca lebih lanjut tentang metode ini di sini .
sumber
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:
Sebenarnya 'indeks' adalah kuncinya. Jika Anda ingin menyimpan posisi kunci, Anda perlu membuat objek khusus untuk menangani ini.
sumber
dengan jquery Anda dapat melakukan ini:
var arr = $.map(obj,function(value, key) { return value; }); alert(obj[0]);
sumber
Dapatkan array kunci, balikkan, lalu jalankan loop Anda
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 }
sumber
Anda dapat membuat array yang diisi dengan bidang objek Anda dan menggunakan indeks pada array dan mengakses properti objek melalui itu
propertiesName:['pr1','pr2','pr3'] this.myObject[this.propertiesName[0]]
sumber
Saya melanjutkan dan membuat fungsi untuk Anda:
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"
sumber
Jika Anda tidak yakin Object.keys () akan mengembalikan Anda kunci dalam urutan yang benar, Anda dapat mencoba logika ini sebagai gantinya
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]])
sumber