Ich habe eine JSON-Datei mit einigen Daten, auf die ich auf meiner AngularJS-Website zugreifen möchte. Jetzt möchte ich nur ein Objekt aus dem Array holen. So möchte ich zum Beispiel Artikel mit ID 1.
Die Daten sehen folgendermaßen aus:
{ "results": [
{
"id": 1,
"name": "Test"
},
{
"id": 2,
"name": "Beispiel"
},
{
"id": 3,
"name": "Sample"
}
] }
Ich möchte die Daten mit der folgenden AngularJS $ http-Funktionalität laden:
$http.get("data/SampleData.json");
was funktioniert. Aber wie kann ich jetzt ein bestimmtes Datenobjekt (nach ID) aus dem Array abrufen, von dem ich es erhalte $http.get
?
Vielen Dank im Voraus für Ihre Hilfe.
Grüße Marc
Antworten:
Die einzige Möglichkeit, dies zu tun, besteht darin, über das Array zu iterieren. Wenn Sie sicher sind, dass die Ergebnisse nach ID sortiert sind, können Sie natürlich eine binäre Suche durchführen
quelle
Verwenden der ES6-Lösung
Für diejenigen, die diese Antwort noch lesen, wurde die
find
Methode in Arrays hinzugefügt , wenn Sie ES6 verwenden. Unter der Annahme derselben Sammlung wäre die Lösung:Ich würde mich jetzt voll und ganz für diese Lösung entscheiden, da sie weniger an eckige oder andere Rahmenbedingungen gebunden ist. Reines Javascript.
Winkellösung (alte Lösung)
Ich wollte dieses Problem folgendermaßen lösen:
Ein Anwendungsfallbeispiel:
Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview
quelle
Für alle, die sich diesen alten Beitrag ansehen, ist dies derzeit der einfachste Weg, dies zu tun. Es ist nur ein AngularJS erforderlich
$filter
. Es ist wie Willemoes Antwort, aber kürzer und leichter zu verstehen.quelle
[0]
dies dazu führen würde, dass es das erste Ergebnis zurückgibt, das es aus der Sammlung findet. Es würde also nur funktionieren, wenn Ihre Sammlung sortiert ist und das gesuchte Objekt das erste ist, das es während seiner Iteration findet. Z.B. Wenn es eine ID: 12 gibt, die vor ID: 2 steht, würde sie ID: 12 zurückgeben.persönlich benutze ich Unterstrich für diese Art von Sachen ... also
dann wäre "a" die Zeile, die Sie von Ihrem Array wollten, in der die ID gleich 2 war
quelle
find
möglicherweise mehrere Objekte zurückgegeben werden können. Da wir nur eines wollen, können wir verwenden,findWhere
das nur das erste Vorkommen zurückgibt (von dem wir wissen, dass es das einzige Vorkommen ist), za = _.findWhere(results, {id: 2})
.Ich möchte nur etwas zu Willemoes Antwort hinzufügen . Der gleiche Code, der direkt in den HTML-Code geschrieben wurde, sieht folgendermaßen aus:
Angenommen, "Ergebnisse" ist eine Variable Ihres FooControllers und Sie möchten die Eigenschaft "Name" des gefilterten Elements anzeigen.
quelle
Sie können
ng-repeat
Daten nur verwenden und auswählen, wenn die Daten mit den gewünschten Daten übereinstimmen.ng-show
Beispiel:quelle
Sie können einfach Ihr Array durchlaufen:
Wenn Sie diese chaotischen Schleifen nicht schreiben möchten, können Sie underscore.js oder Lo-Dash verwenden (Beispiel in letzterem):
quelle
Wenn Sie die Liste der Elemente wie Stadt auf der Grundlage der Status-ID möchten, verwenden Sie
quelle
Leider (es sei denn, ich irre mich) denke ich, dass Sie über das Ergebnisobjekt iterieren müssen.
Zumindest auf diese Weise bricht es aus der Iteration aus, sobald es die richtige übereinstimmende ID findet.
quelle
Warum die Situation komplizieren? Dies ist einfach, schreiben Sie eine Funktion wie diese:
Anwendungsfall:
Ausgabe:
quelle
Ausgabe: Azərbaycan
quelle
Wenn Sie können, entwerfen Sie Ihre JSON-Datenstruktur, indem Sie die Array-Indizes als IDs verwenden. Sie können Ihre JSON-Arrays sogar "normalisieren", solange Sie die Array-Indizes problemlos als "Primärschlüssel" und "Fremdschlüssel" verwenden können, beispielsweise als RDBMS. Als solches können Sie in Zukunft sogar so etwas tun:
Dies ist die Lösung "By Design" . Für Ihren Fall einfach:
Wenn Ihr ID-Format etwa "XX-0001" ist und der Array-Index 0 ist , können Sie natürlich entweder eine Zeichenfolgenmanipulation durchführen, um die ID zuzuordnen. Andernfalls kann nichts dagegen unternommen werden, außer durch den Iterationsansatz.
quelle
Ich weiß, dass ich zu spät bin, um zu antworten, aber es ist immer besser, aufzutauchen, als überhaupt nicht aufzutauchen :). ES6 Weg, um es zu bekommen:
quelle
Der einfache Weg, um (ein) Element aus dem Array anhand der ID abzurufen:
Die find () -Methode gibt den Wert des ersten Elements im Array zurück, das die bereitgestellte Testfunktion erfüllt. Andernfalls wird undefined zurückgegeben.
Sie müssen filter () nicht verwenden und das erste Element xx.filter () [0] abfangen, wie in den obigen Kommentaren
Gleiches gilt für Objekte im Array
Wenn Sie mehrere IDs haben, verwenden Sie natürlich die filter () -Methode, um alle Objekte abzurufen. Prost
quelle
Ich bin mir nicht sicher, ob es wirklich gut ist, aber das war hilfreich für mich. Ich musste $ scope verwenden, damit es richtig funktioniert.
quelle
Verwenden Sie $ timeout und führen Sie eine Funktion aus, um im Array "results" zu suchen
quelle
Ich würde das Ergebnisarray mit einem Winkelfilter wie diesem durchlaufen:
var foundResultObject = getObjectFromResultsList (Ergebnisse, 1);
quelle