de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 mooonli
mooonli
Question

Mendapatkan objek tertentu dengan id dari array dari objek di AngularJS

Saya memiliki sebuah file JSON yang mengandung beberapa data yang saya ingin akses pada AngularJS website. Sekarang apa yang saya inginkan adalah untuk mendapatkan hanya satu objek dari array. Jadi saya d seperti misalnya Item dengan id 1.

Data yang terlihat seperti ini:

{ "results": [
    {
        "id": 1,
        "name": "Test"
    },
    {
        "id": 2,
        "name": "Beispiel"
    },
    {
        "id": 3,
        "name": "Sample"
    }
] }

Saya ingin memuat data dengan AngularJS $http fungsi seperti ini:

$http.mendapatkan("data/SampleData.json");

yang bekerja. Tapi bagaimana bisa sekarang saya mendapatkan data spesifik obyek (id) dari array yang saya dapatkan dari $http.dapatkan ?

Terima kasih sebelumnya atas bantuan anda.

Menyapa Marc

109 2013-10-25T12:36:19+00:00 17
Nina Scholz
Nina Scholz
Pertanyaan edit 4 Januari 2019 в 7:27
Pemrograman
arrays
javascript
json
object
angularjs
 Willemoes
Willemoes
24 Juni 2014 в 6:35
2014-06-24T18:35:40+00:00
Lebih
Sumber
Sunting
#22619953

Menggunakan ES6 solusi

Bagi mereka yang masih membaca jawaban ini, jika anda menggunakan ES6 menemukan metode ditambahkan dalam array. Jadi asumsi koleksi yang sama, solusi'a sama:

const foo = { "results": [
    {
        "id": 12,
        "name": "Test"
    },
    {
        "id": 2,
        "name": "Beispiel"
    },
    {
        "id": 3,
        "name": "Sample"
    }
] };
foo.results.find(item => item.id === 2)

I'd benar-benar pergi untuk solusi ini sekarang, karena kurang terkait dengan sudut atau kerangka lainnya. Pure Javascript.

Sudut solusi (solusi tua)

Saya bertujuan untuk memecahkan masalah ini dengan melakukan hal berikut:

$filter('filter')(foo.results, {id: 1})[0];

Sebuah use case contoh:

app.controller('FooCtrl', ['$filter', function($filter) {
    var foo = { "results": [
        {
            "id": 12,
            "name": "Test"
        },
        {
            "id": 2,
            "name": "Beispiel"
        },
        {
            "id": 3,
            "name": "Sample"
        }
    ] };

    // We filter the array by id, the result is an array
    // so we select the element 0

    single_object = $filter('filter')(foo.results, function (d) {return d.id === 2;})[0];

    // If you want to see the result, just check the log
    console.log(single_object);
}]);

Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview

 Willemoes
Willemoes
Jawaban edit 9 Agustus 2017 в 4:48
240
0
 Tillman32
Tillman32
31 Juli 2015 в 7:17
2015-07-31T19:17:40+00:00
Lebih
Sumber
Sunting
#22619956

Bagi siapa saja yang melihat posting lama ini, ini adalah cara termudah untuk melakukannya saat ini. Ini hanya membutuhkan sebuah AngularJS $filter. Seperti Willemoes menjawab, tapi lebih pendek dan lebih mudah untuk memahami.

{ 
    "results": [
        {
            "id": 1,
            "name": "Test"
        },
        {
            "id": 2,
            "name": "Beispiel"
        },
        {
            "id": 3,
            "name": "Sample"
        }
    ] 
}

var object_by_id = $filter('filter')(foo.results, {id: 2 })[0];
// Returns { id: 2, name: "Beispiel" }

PERINGATAN

Sebagai @mpgn mengatakan, ini doesn't bekerja dengan benar. Ini akan menangkap lebih banyak hasil. Contoh: bila anda mencari 3 ini akan menangkap 23 juga

 tomloprod
tomloprod
Jawaban edit 16 November 2016 в 7:13
26
0
Jason Boerner
Jason Boerner
23 Januari 2014 в 4:30
2014-01-23T16:30:40+00:00
Lebih
Sumber
Sunting
#22619950

secara pribadi saya menggunakan garis bawah untuk hal-hal seperti ini... jadi

a = _.find(results,function(rw){ return rw.id == 2 });

kemudian "a" akan menjadi baris yang anda inginkan array dimana id adalah sama dengan 2

25
0
 Ena
Ena
7 April 2015 в 9:03
2015-04-07T09:03:33+00:00
Lebih
Sumber
Sunting
#22619955

Saya hanya ingin menambahkan sesuatu untuk Willemoes jawaban. Kode yang sama yang ditulis secara langsung dalam HTML akan terlihat seperti ini:

{{(FooController.results | filter : {id: 1})[0].name }}

Dengan asumsi bahwa "hasil" adalah variabel yang anda FooController dan anda ingin menampilkan "" properti dari item disaring.

 Community
Community
Jawaban edit 23 Mei 2017 в 12:03
16
0
James  Kuta Simiyu
James Kuta Simiyu
15 Mei 2014 в 10:03
2014-05-15T10:03:35+00:00
Lebih
Sumber
Sunting
#22619952

Anda dapat menggunakan ng-repeat dan memilih data hanya jika data sesuai dengan apa yang anda cari menggunakan ng-show misalnya:

 <div ng-repeat="data in res.results" ng-show="data.id==1">
     {{data.name}}
 </div>    
Srikanth Jeeva
Srikanth Jeeva
Jawaban edit 15 Mei 2014 в 10:26
12
0
 kamituel
kamituel
25 Oktober 2013 в 12:46
2013-10-25T12:46:11+00:00
Lebih
Sumber
Sunting
#22619948

Anda dapat loop melalui array:

var doc = { /* your json */ };

function getById(arr, id) {
    for (var d = 0, len = arr.length; d < len; d += 1) {
        if (arr[d].id === id) {
            return arr[d];
        }
    }
}

var doc_id_2 = getById(doc.results, 2);

Jika anda don't ingin menulis ini berantakan loop, anda dapat mempertimbangkan untuk menggunakan underscore.js atau Lo-Dash (contoh kedua):

var doc_id_2 = _.filter(doc.results, {id: 2})[0]
9
0
Ali Adravi
Ali Adravi
5 Agustus 2015 в 9:48
2015-08-05T21:48:14+00:00
Lebih
Sumber
Sunting
#22619957

Jika anda ingin daftar barang-barang seperti kota pada dasar negara kemudian gunakan id

var state_Id = 5;
var items = ($filter('filter')(citylist, {stateId: state_Id }));
8
0
 simonlchilds
simonlchilds
25 Oktober 2013 в 12:43
2013-10-25T12:43:49+00:00
Lebih
Sumber
Sunting
#22619947

Sayangnya (kecuali saya'm keliru), saya pikir anda perlu untuk iterate atas hasil objek.

for(var i = 0; i < results.length; i += 1){
    var result = results[i];
    if(result.id === id){
        return result;
    }
}

Setidaknya dengan cara ini ia akan keluar dari perulangan secepat itu menemukan benar sesuai id.

7
0
 Musa
Musa
27 September 2016 в 1:47
2016-09-27T13:47:33+00:00
Lebih
Sumber
Sunting
#22619959

Mengapa mempersulit situasi? ini adalah sederhana menulis beberapa fungsi seperti ini:

function findBySpecField(data, reqField, value, resField) {
    var container = data;
    for (var i = 0; i < container.length; i++) {
        if (container[i][reqField] == value) {
            return(container[i][resField]);
        }
    }
    return '';
}

Use Case:

var data=[{
            "id": 502100,
            "name": "Bərdə filialı"
        },
        {
            "id": 502122
            "name": "10 saylı filialı"
        },
        {
            "id": 503176
            "name": "5 sayli filialı"
        }]

console.log('Result is  '+findBySpecField(data,'id','502100','name'));

output:

Result is Bərdə filialı
6
0
Solution / Answer
Antonio E.
Antonio E.
25 Oktober 2013 в 12:48
2013-10-25T12:48:34+00:00
Lebih
Sumber
Sunting
#22619949

Satu-satunya cara untuk melakukan ini adalah untuk iterate atas array. Tentunya jika anda yakin bahwa hasil yang diperintahkan oleh id anda dapat melakukan pencarian biner

5
0
Celal Muhtar
Celal Muhtar
27 Januari 2017 в 12:37
2017-01-27T12:37:41+00:00
Lebih
Sumber
Sunting
#22619960
$scope.olkes = [{'id':11, 'name':'---Zəhmət olmasa seçim edin---'},
                {'id':15, 'name':'Türkyə'},
                {'id':45, 'name':'Azərbaycan'},
                {'id':60, 'name':'Rusya'},
                {'id':64, 'name':'Gürcüstan'},
                {'id':65, 'name':'Qazaxıstan'}];

<span>{{(olkes | filter: {id:45})[0].name}}</span>

output: Azərbaycan

4
0
Hitesh Kumar
Hitesh Kumar
27 Januari 2017 в 12:45
2017-01-27T12:45:59+00:00
Lebih
Sumber
Sunting
#22619961

Aku tahu aku terlambat untuk menjawab tapi itu's selalu lebih baik untuk menunjukkan-up daripada tidak muncul sama sekali :). ES6 cara untuk mendapatkannya:

$http.get("data/SampleData.json").then(response => {
let id = 'xyz';
let item = response.data.results.find(result => result.id === id);
console.log(item); //your desired item
});
2
0
Antonio Ooi
Antonio Ooi
4 Maret 2014 в 10:52
2014-03-04T22:52:53+00:00
Lebih
Sumber
Sunting
#22619951

Jika anda bisa, desain struktur data JSON dengan memanfaatkan indeks array sebagai Id. Anda bahkan dapat "menormalkan" anda JSON array asalkan anda've tidak ada masalah menggunakan indeks array sebagai "primary key" dan "kunci asing", sesuatu seperti RDBMS. Dengan demikian, di masa depan, anda bahkan dapat melakukan sesuatu seperti ini:

function getParentById(childID) {
var parentObject = parentArray[childArray[childID].parentID];
return parentObject;
}

Ini adalah solusi "Dengan Desain". Untuk kasus anda, cukup:

var nameToFind = results[idToQuery - 1].name;

Tentu saja, jika anda format ID adalah sesuatu seperti "XX-0001" dari mana indeks array adalah 0, maka anda dapat melakukan beberapa manipulasi string untuk memetakan ID, atau yang lain tidak ada yang dapat dilakukan tentang itu kecuali melalui pendekatan iterasi.

Antonio Ooi
Antonio Ooi
Jawaban edit 4 Maret 2014 в 11:15
2
0
 abosancic
abosancic
20 Juli 2017 в 1:32
2017-07-20T13:32:17+00:00
Lebih
Sumber
Sunting
#22619962

Cara sederhana untuk mendapatkan (satu) elemen dari array dengan id:

Metode find() mengembalikan nilai dari elemen pertama dalam array yang memenuhi disediakan pengujian fungsi. Jika tidak terdefinisi dikembalikan.

function isBigEnough(element) {
    return element >= 15;
}

var integers = [12, 5, 8, 130, 160, 44];
integers.find(isBigEnough); // 130  only one element - first

anda don't perlu menggunakan filter() dan menangkap elemen pertama xx.filter()[0] seperti dalam komentar di atas

Hal yang sama untuk benda-benda dalam array

var foo = {
"results" : [{
    "id" : 1,
    "name" : "Test"
}, {
    "id" : 2,
    "name" : "Beispiel"
}, {
    "id" : 3,
    "name" : "Sample"
}
]};

var secondElement = foo.results.find(function(item){
    return item.id == 2;
});

var json = JSON.stringify(secondElement);
console.log(json);

Tentu saja jika anda memiliki beberapa id kemudian menggunakan filter() metode untuk mendapatkan semua benda. Cheers

function isBigEnough(element) {
    return element >= 15;
}

var integers = [12, 5, 8, 130, 160, 44];
integers.find(isBigEnough); // 130  only one element - first
var foo = {
"results" : [{
    "id" : 1,
    "name" : "Test"
}, {
    "id" : 2,
    "name" : "Beispiel"
}, {
    "id" : 3,
    "name" : "Sample"
}
]};

var secondElement = foo.results.find(function(item){
    return item.id == 2;
});

var json = JSON.stringify(secondElement);
console.log(json);
1
0
 abovetempo
abovetempo
6 Juni 2018 в 2:02
2018-06-06T14:02:53+00:00
Lebih
Sumber
Sunting
#22619963

Saya akan iterate atas hasil array menggunakan angularjs filter seperti ini:

var foundResultObject = getObjectFromResultsList(hasil, 1);

function getObjectFromResultsList(results, resultIdToRetrieve) {
        return $filter('filter')(results, { id: resultIdToRetrieve }, true)[0];
    }
 abovetempo
abovetempo
Jawaban edit 6 Juni 2018 в 4:26
0
0
Moein Fazeli
Moein Fazeli
20 November 2015 в 7:39
2015-11-20T07:39:41+00:00
Lebih
Sumber
Sunting
#22619958

menggunakan $timeout dan menjalankan fungsi untuk pencarian di "hasil" array

app.controller("Search", function ($scope, $timeout) {
        var foo = { "results": [
          {
             "id": 12,
             "name": "Test"
          },
          {
             "id": 2,
             "name": "Beispiel"
          },
          {
             "id": 3,
            "name": "Sample"
          }
        ] };
        $timeout(function () {
            for (var i = 0; i < foo.results.length; i++) {
                if (foo.results[i].id=== 2) {
                    $scope.name = foo.results[i].name;
                }
            }
        }, 10);

    });
0
0
 Jordy
Jordy
27 Februari 2015 в 4:23
2015-02-27T16:23:28+00:00
Lebih
Sumber
Sunting
#22619954
    projectDetailsController.controller('ProjectDetailsCtrl', function ($scope, $routeParams, $http) {
    $http.get('data/projects.json').success(function(data) {

        $scope.projects = data;
        console.log(data);

        for(var i = 0; i < data.length; i++) {
        $scope.project = data[i];
        if($scope.project.name === $routeParams.projectName) {
            console.log('project-details',$scope.project);
        return $scope.project;
        }
        }

    });
});

Tidak yakin apakah itu's benar-benar baik, tapi ini sangat membantu bagi saya.. Saya perlu menggunakan $ruang lingkup untuk membuatnya bekerja dengan baik.

0
0
Related communities 2
JavaScript Indonesia
JavaScript Indonesia
14 549 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
Angular Indonesia
Angular Indonesia
3 498 pengguna
Framework web development aplikasi web dan mobile https://angular.io/ Facebook Group https://www.facebook.com/groups/462764390497214/ Github Repo Angular ID https://github.com/angular-indonesia Medium Angular Indonesia https://medium.com/angularid
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 14 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RU
TR
ZH
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi