Spezifische Objekt-id aus array von Objekten in AngularJS
Habe ich eine JSON-Datei mit einigen Daten, die ich d gerne Zugriff auf meine AngularJS-website. Nun, was ich möchte, ist man nur ein Objekt aus dem array. Also ich möchte zum Beispiel Artikel mit der id 1.
Den Daten sieht wie folgt aus:
{ "results": [
{
"id": 1,
"name": "Test"
},
{
"id": 2,
"name": "Beispiel"
},
{
"id": 3,
"name": "Sample"
}
] }
Ich d gerne laden Sie die Daten mit AngularJS $http-Funktionen wie diese:
$http.get("data/SampleData.json");
die arbeiten. Aber wie kann ich jetzt die spezifischen Daten-Objekts (id) aus dem array, die ich von $http.get
?
Dank im Voraus für Eure Hilfe.
Grüßt
Marc
- Hast du es selbst? Wenn dem so ist, können wir sehen, was Sie kam mit?
- Nun, ich habe keine Ahnung, welche Art wäre die beste Verwendung von AngularJS. Was ich nicht mag ist die Iteration über das array und machst einen gleich auf die id. Vielleicht gibt es einen besseren Weg?
- Sollten Sie sich auf underscorejs oder ähnlichen Bibliotheken für die Verarbeitung. AngularJS ist MVVM-framework und kann keine api dafür.
- Sie Durchlaufen das array. Selbst wenn Sie Unterstrich, oder etwas ähnliches, es ist die Funktionen, die hinter den kulissen sind gerade Durchlaufen.
- bitte fügen Sie eckige-code für diese
- sieht aus wie es ist Zeit, ändern Sie die gewählte Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einzige Weg, dies zu tun ist, um die Iteration über das array. Natürlich, wenn Sie sicher sind, dass die Ergebnisse sind sortiert nach id, die Sie tun können, eine binäre Suche
Mit ES6-Lösung
Für diejenigen, die noch Lesen, dass diese Antwort, wenn Sie mit ES6 die
find
Methode wurde Hinzugefügt, in arrays. Also unter der Annahme der gleichen Sammlung, die Lösung wäre:Ich würde Total gehen für diese Lösung nun, da ist weniger gebunden an eckige oder andere Frameworks. Reines Javascript.
Winkel-Lösung (alte Lösung)
Ich hat genau dieses problem zu lösen, indem Sie Folgendes tun:
Einer use-case-Beispiel:
Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview
id
s? Ich meine die zweiteid
kommt aus einem verschachtelten Daten von derjson
.Für alle, die sich an diesem alten post, das ist der einfachste Weg, es zu tun derzeit. Es Bedarf nur eines AngularJS
$filter
. Wie Willemoes Antwort, aber kürzer und leichter zu verstehen.[0]
verursachen würde, bis Sie wieder das erste Ergebnis es Funde aus der Sammlung, so würde es nur funktionieren, wenn Sie Ihre Sammlung ist sortiert und das Objekt, das Sie suchen, ist die erste, die es findet während der iteration. ZB. wenn es eine id:12, das kommt vor-id: 2, es würde zurückkehren-id: 12.persönlich verwende ich den Unterstrich für diese Art von Sachen... so
dann "a" wäre die Zeile, die Sie wollte in Ihrem array, in dem die id gleich 2
find
können potenziell Rückkehr mehrere Objekte. Da wir nur eines wollen, können wirfindWhere
die gibt nur das erste vorkommen (von denen wir wissen, ist das einzige vorkommen), z.B.a = _.findWhere(results, {id: 2})
.Ich möchte nur etwas hinzufügen, um Willemoes Antwort.
Der gleiche code direkt im HTML-Code wird wie folgt Aussehen:
Davon aus, dass "Ergebnisse" ist eine variable von Ihrem FooController und Sie wollen, um den "name" - Eigenschaft des gefilterten Objekt.
Können Sie
ng-repeat
und Holen nur dann Daten, wenn Daten übereinstimmt, was Sie suchen, mitng-show
zum Beispiel:
Können Sie einfach Schleife über das array:
Wenn Sie nicht wollen, dies zu schreiben, unordentlichen Schleifen, kann man sich überlegen, underscore.js oder Lo-Dash (Beispiel in der letzteren):
Wenn Sie möchten, dass die Liste der Elemente, wie die Stadt auf der basis von state-id verwenden Sie dann
Leider (wenn ich nicht Irre), ich glaube, Sie brauchen, um die Ergebnisse Durchlaufen Objekt.
Mindestens diese Weise wird es brechen aus der iteration sobald es findet die richtigen passenden id.
for..in
über arrays.Warum verkomplizieren die situation? dies ist einfach zu schreiben, eine Funktion wie diese:
Anwendungsfall:
Ausgabe:
Ausgabe: Azərbaycan
Wenn Sie können, gestalten Sie Ihre JSON-Daten-Struktur, die durch die Nutzung der array-Indizes als IDs. Sie können sogar "normalisieren" Ihre JSON-arrays, solange haben Sie kein problem damit, über den array-Indizes als "Primärschlüssel" und "Fremdschlüssel", so etwas wie RDBMS. Als solche, die in Zukunft, Sie kann sogar etwas wie das hier tun:
Dies ist die Lösung "By Design". Für deinen Fall einfach:
Natürlich, wenn Sie Ihre ID-format ist so etwas wie "XX-0001" der array-index ist 0, dann können Sie entweder einige string-manipulation auf der Karte die ID, oder sonst nichts über das getan werden kann, außer durch die iteration Ansatz.
Ich weiß, ich bin zu spät zu Antworten, aber es ist immer besser, sich zu zeigen, anstatt nicht zeigen, bis auf alle :). ES6 Weg, es zu bekommen:
Den einfachen Weg, um (ein) element von array-id:
Die find () - Methode gibt den Wert des ersten Elements im array erfüllt, dass die Prüf-Funktion. Ansonsten undefined zurückgegeben wird.
brauchen Sie nicht zu verwenden, filter() und fangen Sie erste element xx.filter()[0] wie in den Kommentaren oben
Das gleiche für Objekte im array
Natürlich, wenn Sie mehrere id verwenden Sie dann die filter () - Methode, um alle Objekte.
Cheers
JS:
JS:
Nicht sicher, ob es wirklich gut ist, aber das war hilfreich für mich..
Ich brauchte, um $scope, damit es richtig funktioniert.
verwenden, $timeout, und führen Sie eine Funktion für die Suche in der "Ergebnis" - array
Ich würde die Ergebnisse Durchlaufen array mit einem angularjs-filter wie dieser:
var foundResultObject = getObjectFromResultsList(Ergebnis, 1);