Saya memiliki file JSON yang berisi beberapa data yang ingin saya akses di situs web AngularJS saya. Sekarang yang saya inginkan adalah mendapatkan hanya satu objek dari array. Jadi saya ingin misalnya Item dengan id 1.
Datanya terlihat seperti ini:
{ "results": [
{
"id": 1,
"name": "Test"
},
{
"id": 2,
"name": "Beispiel"
},
{
"id": 3,
"name": "Sample"
}
] }
Saya ingin memuat data dengan fungsionalitas AngularJS $ http seperti ini:
$http.get("data/SampleData.json");
yang berhasil. Tapi bagaimana sekarang saya bisa mendapatkan objek data tertentu (menurut id) dari array yang saya dapatkan $http.get
?
Terima kasih sebelumnya atas bantuan Anda.
Salam Marc
Jawaban:
Satu-satunya cara untuk melakukannya adalah dengan melakukan iterasi pada array. Tentunya jika Anda yakin bahwa hasil diurutkan berdasarkan id, Anda dapat melakukan pencarian biner
sumber
Menggunakan solusi ES6
Bagi mereka yang masih membaca jawaban ini, jika Anda menggunakan ES6,
find
metode tersebut ditambahkan dalam array. Jadi dengan asumsi koleksi yang sama, solusinya adalah:Saya akan benar-benar menggunakan solusi ini sekarang, karena tidak terlalu terikat pada sudut atau kerangka lainnya. Javascript murni.
Solusi sudut (solusi lama)
Saya bertujuan untuk menyelesaikan masalah ini dengan melakukan hal berikut:
Contoh kasus penggunaan:
Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview
sumber
Bagi siapa pun yang melihat posting lama ini, ini adalah cara termudah untuk melakukannya saat ini. Ini hanya membutuhkan AngularJS
$filter
. Ini seperti jawaban Willemoes, tapi lebih pendek dan lebih mudah dimengerti.sumber
[0]
akan menyebabkannya mengembalikan hasil pertama yang ditemukannya dari koleksi, jadi itu hanya akan berfungsi jika koleksi Anda diurutkan dan objek yang Anda cari adalah yang pertama ditemukan selama iterasi. Misalnya. jika ada id: 12 yang muncul sebelum id: 2, itu akan mengembalikan id: 12.Secara pribadi saya menggunakan garis bawah untuk hal-hal semacam ini ... jadi
maka "a" akan menjadi baris yang Anda inginkan dari array Anda di mana id sama dengan 2
sumber
find
berpotensi mengembalikan banyak objek. Karena kita hanya menginginkan satu, kita bisa menggunakanfindWhere
yang hanya mengembalikan kemunculan pertama (yang kita tahu adalah satu-satunya kemunculan), misa = _.findWhere(results, {id: 2})
.Saya hanya ingin menambahkan sesuatu ke jawaban Willemoes . Kode yang sama yang ditulis langsung di dalam HTML akan terlihat seperti ini:
Mengasumsikan bahwa "hasil" adalah variabel dari FooController Anda dan Anda ingin menampilkan properti "nama" dari item yang difilter.
sumber
Anda dapat menggunakan
ng-repeat
dan memilih data hanya jika data cocok dengan yang Anda cari,ng-show
misalnya:sumber
Anda bisa mengulang array Anda:
Jika Anda tidak ingin menulis loop yang berantakan ini, Anda dapat mempertimbangkan untuk menggunakan underscore.js atau Lo-Dash (contoh yang terakhir):
sumber
Jika Anda ingin daftar item seperti kota berdasarkan id negara, maka gunakan
sumber
Sayangnya (kecuali saya salah), saya pikir Anda perlu mengulangi objek hasil.
Setidaknya dengan cara ini ia akan keluar dari iterasi segera setelah menemukan id yang cocok dengan benar.
sumber
Mengapa memperumit situasi? ini sederhana tulis beberapa fungsi seperti ini:
Kasus Penggunaan:
keluaran:
sumber
keluaran: Azərbaycan
sumber
Jika Anda bisa, rancang struktur data JSON Anda dengan menggunakan indeks array sebagai ID. Anda bahkan dapat "menormalkan" array JSON Anda selama tidak ada masalah dalam menggunakan indeks array sebagai "kunci utama" dan "kunci asing", seperti RDBMS. Karena itu, di masa mendatang, Anda bahkan dapat melakukan hal seperti ini:
Ini adalah solusi "By Design" . Untuk kasus Anda, cukup:
Tentu saja, jika format ID Anda adalah seperti "XX-0001" yang indeks lariknya 0 , maka Anda dapat melakukan manipulasi string untuk memetakan ID; atau tidak ada yang bisa dilakukan tentang itu kecuali melalui pendekatan iterasi.
sumber
Saya tahu saya terlambat untuk menjawab tetapi selalu lebih baik untuk datang daripada tidak muncul sama sekali :). Cara ES6 untuk mendapatkannya:
sumber
Cara sederhana untuk mendapatkan (satu) elemen dari array dengan id:
Metode find () mengembalikan nilai elemen pertama dalam larik yang memenuhi fungsi pengujian yang disediakan. Jika tidak, undefined dikembalikan.
Anda tidak perlu menggunakan filter () dan menangkap elemen pertama xx.filter () [0] seperti pada komentar di atas
Hal yang sama untuk objek dalam larik
Tentu saja jika Anda memiliki banyak id maka gunakan metode filter () untuk mendapatkan semua objek. Bersulang
sumber
Tidak yakin apakah itu benar-benar bagus, tapi ini membantu saya .. Saya perlu menggunakan $ scope untuk membuatnya bekerja dengan baik.
sumber
gunakan $ timeout dan jalankan fungsi untuk mencari di array "hasil"
sumber
Saya akan mengulangi array hasil menggunakan filter angularjs seperti ini:
var foundResultObject = getObjectFromResultsList (hasil, 1);
sumber