Sebagai contoh, saya punya:
var Data = [
{ id_list: 1, name: 'Nick', token: '312312' },
{ id_list: 2, name: 'John', token: '123123' },
]
Lalu, saya ingin mengurutkan / membalikkan objek ini dengan name
, misalnya. Dan kemudian saya ingin mendapatkan sesuatu seperti ini:
var Data = [
{ id_list: 2, name: 'John', token: '123123' },
{ id_list: 1, name: 'Nick', token: '312312' },
]
Dan sekarang saya ingin tahu indeks objek dengan properti name='John'
untuk mendapatkan nilai token properti.
Bagaimana saya mengatasi masalah?
javascript
arrays
object
rsboarder
sumber
sumber
{Key:Value}
, saya memperbaikinya untuk Anda.Data
objek asli . Ini hanyalah nama variabel dengan huruf kapital, yang bertentangan dengan konvensi. Jika ada orang lain yang terganggu dengan ini, saya akan mengedit pertanyaan dan jawaban untuk memperbaiki penamaan ini.Jawaban:
Seperti jawaban lain yang disarankan, perulangan melalui array mungkin adalah cara terbaik. Tapi saya akan memasukkannya ke dalam fungsinya sendiri, dan membuatnya sedikit lebih abstrak:
Dengan ini, Anda tidak hanya dapat menemukan yang berisi 'John' tetapi Anda dapat menemukan yang berisi token '312312':
EDIT: Fungsi yang diperbarui untuk mengembalikan -1 ketika tidak ditemukan sehingga mengikuti konstruk yang sama dengan Array.prototype.indexOf ()
sumber
Karena bagian pengurutan sudah dijawab. Saya hanya akan mengusulkan cara elegan lain untuk mendapatkan indexOf dari properti di array Anda
Contoh Anda adalah:
Anda dapat melakukan:
Array.prototype.map
tidak tersedia di IE7 atau IE8. Kompatibilitas ES5Dan ini dia dengan sintaks ES6 dan panah, yang bahkan lebih sederhana:
sumber
Jika Anda baik-baik saja dengan menggunakan ES6. Array sekarang memiliki fungsi findIndex . Yang berarti Anda dapat melakukan sesuatu seperti ini:
sumber
name: John
) ini hanya akan mengembalikan pertandingan pertamaYang merupakan versi sederhana dari:
Dari mozilla.org:
sumber
token
bidang, bukanname
bidang, mungkin ada masalah, seperti yangData[0].token == 312312
dievaluasitrue
, tetapiData[0].token === 321321
dievaluasifalse
.Jika Anda mengalami masalah dengan IE, Anda bisa menggunakan fungsi map () yang didukung mulai 9.0 dan seterusnya:
sumber
Satu-satunya cara yang diketahui bagi saya adalah dengan mengulang-ulang semua array:
atau case sensitive:
Pada indeks hasil variabel berisi indeks objek atau -1 jika tidak ditemukan.
sumber
cara prototipe
sumber
Anda dapat menggunakan Array.sort menggunakan fungsi kustom sebagai parameter untuk menentukan mekanisme penyortiran Anda.
Dalam contoh Anda, itu akan memberikan:
Fungsi sortir harus mengembalikan -1 jika a datang sebelum b, 1 jika a datang setelah b dan 0 jika keduanya sama. Terserah Anda untuk menentukan logika yang tepat dalam fungsi pengurutan Anda untuk mengurutkan array.
Sunting: Tidak terjawab bagian terakhir dari pertanyaan Anda di mana Anda ingin mengetahui indeks. Anda harus mengulang-ulang array untuk menemukan bahwa seperti yang orang lain katakan.
sumber
Cukup telusuri array Anda dan temukan posisi:
sumber
if(Data[item].name == 'John')
, saya memperbaikinya untuk Anda.Ini mungkin bermanfaat
Menyalin ini dari https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects
sumber
Mengapa Anda tidak menggunakan pekerjaan kecil?
Buat array baru dengan nama sebagai indeks. setelah itu semua pencarian akan menggunakan indeks. Jadi, hanya satu putaran. Setelah itu Anda tidak perlu mengulang semua elemen!
http://jsbin.com/xibala/1/edit
contoh hidup.
sumber
Jawaban Chris Pickett yang diperluas karena dalam kasus saya, saya perlu mencari lebih dalam dari satu level atribut:
Anda dapat melewatkan 'attr1.attr2' ke dalam fungsi
sumber
Bagaimana dengan ini ? :
Dengan asumsi Anda menggunakan lodash atau underscorejs.
sumber
Jika Anda memiliki satu Objek dengan banyak objek di dalamnya, jika Anda ingin tahu jika beberapa objek disertakan pada objek Master, cukup cantumkan find (MasterObject, 'Object to Search'), fungsi ini akan mengembalikan respons jika ada atau tidak (BENAR atau SALAH) ), Saya harap membantu dengan ini, dapat melihat contoh di JSFiddle .
sumber
sumber
sumber
Jika Anda ingin mendapatkan nilai token properti maka Anda juga dapat mencoba ini
di mana _.findKey adalah fungsi lodash
sumber
Atau sebagai pengganti jawaban German Attanasio Ruiz, Anda dapat menghilangkan loop ke-2 dengan menggunakan Array.reduce () alih-alih Array.map ();
sumber
Menggunakan garis bawah:
sumber