Zu machen, wie die ng-repeat-filter out duplicate Ergebnisse
Bin ich mit einem einfachen ng-repeat
über eine JSON-Datei und wollen, um Kategorie-Namen. Es gibt etwa 100 Objekten, die jeweils die Zugehörigkeit zu einer Kategorie - aber es sind nur etwa 6 Kategorien.
Mein aktuelle code ist:
<select ng-model="orderProp" >
<option ng-repeat="place in places" value="{{place.category}}">{{place.category}}</option>
</select>
Die Ausgabe ist 100 verschiedene Möglichkeiten, meist Dubletten. Wie verwende ich Eckige zu prüfen, ob ein {{place.category}}
bereits vorhanden ist, und nicht, dass eine option, wenn es das schon gibt?
edit: In meinem javascript $scope.places = JSON data
, nur um zu klären
Warum gehst du nicht einfach dedup Ihre $Umfang.Orte? jquery map api.jquery.com/map
was war die endgültige Lösung? IST, dass es oben, oder gibt es ein JS zu tun das de-duping
Ich möchte wissen, die Lösung des Problems. Postet bitte ein follow-up. Danke!
Beginnen werde ich mit ein TLDR: Verwenden Sie die Antworten unten oder verwenden Sie Vanille Javascript heraus zu filtern und nur eindeutige Werte in einem array. Was ich Tat: am Ende, es war ein problem mit meiner Logik und meinem Verständnis von MVC. Ich war das laden der Daten aus MongoDB Fragen, für eine Sicherung von Daten und wollte Gewinkelt auf Magische Weise zu filtern, nach unten zu nur einzigartige Orte. Die Lösung ist, wie wenn das oft der Fall, war halt faul und Update mein DB-Modell - für mich war es Berufung Mongo ' s
vielen Dank für das update!
was war die endgültige Lösung? IST, dass es oben, oder gibt es ein JS zu tun das de-duping
Ich möchte wissen, die Lösung des Problems. Postet bitte ein follow-up. Danke!
Beginnen werde ich mit ein TLDR: Verwenden Sie die Antworten unten oder verwenden Sie Vanille Javascript heraus zu filtern und nur eindeutige Werte in einem array. Was ich Tat: am Ende, es war ein problem mit meiner Logik und meinem Verständnis von MVC. Ich war das laden der Daten aus MongoDB Fragen, für eine Sicherung von Daten und wollte Gewinkelt auf Magische Weise zu filtern, nach unten zu nur einzigartige Orte. Die Lösung ist, wie wenn das oft der Fall, war halt faul und Update mein DB-Modell - für mich war es Berufung Mongo ' s
db.collection.distinct("places")
war, die weit, weit besser als es zu tun im Rahmen Eckig! Leider ist dies nicht für alle funktioniert.vielen Dank für das update!
InformationsquelleAutor JVG | 2013-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie die einzigartige filter aus AngularUI (Quellcode hier erhältlich: AngularUI einzigartige filter) und verwenden Sie es, direkt in die ng-Optionen (oder ng-repeat).
angular.module('yourModule', ['ui', 'ui.filters']);
. War ratlos bis ich nahm einen Blick in die AngularUI js-Datei.Die
unique
filter können derzeit gefunden werden als Teil des AngularJs UI-UtilsIn der neuen version des ui-utils, können Sie einfach schließen Sie die Benutzeroberfläche.einzigartig auf seine eigenen. verwenden bower installieren, nur für das Modul.
Wenn Sie nicht wollen, gehören AngularUI und seiner Gesamtheit, aber verwenden möchten das einzigartige filter, können Sie einfach kopieren und einfügen der unique.js Quelle in Ihrer app, und ändern Sie dann
angular.module('ui.filters')
zu Ihrem app-Namen.InformationsquelleAutor jpmorin
Oder schreiben Sie Ihre eigenen filter mit lodash.
Obwohl ich verwendet, Unterstrich, diese Lösung funktionierte wie ein Charme. Danke!
Sehr elegante Lösung.
lodash ist ein fork von Unterstrich. Es hat eine bessere Leistung und weitere Hilfsmittel.
in lodash v4
_.uniqBy(arr, field);
sollten für die verschachtelten EigenschaftenInformationsquelleAutor Mike Ward
Können Sie 'einzigartig'(- Aliase: uniq) filter in eckig.filter Modul
Verwendung:
colection | uniq: 'property'
Sie können auch filter von verschachtelten Eigenschaften:
colection | uniq: 'property.nested_property'
Was Sie tun können, ist so etwas wie das..
HTML: Wir filtern, indem Sie die Kunden-id, ich.e entfernen Sie doppelte Kunden
Ergebnis
Kunden-Liste:
foo 10
bar 20
baz 30
Kannst du uns Beispiel-Objekt, das ähnlich zu deinem problem ?
Danke @Ariel M.! Hier ist ein Beispiel der Daten:
@GregGrater ...
Super!!!!! tolle Bibliothek!! danke!!
InformationsquelleAutor a8m
dieser code funktioniert für mich.
dann
InformationsquelleAutor Eduardo Ortiz
Wenn Sie möchten, um die Liste der Kategorien, ich denke, Sie sollten explizit Ihre
Absicht in den Blick.
in der Steuerung:
Wenn Sie möchten, um die Gruppierung der Optionen, ist es andere Frage. Möchten Sie vielleicht einen Blick in die optgroup-element. Eckige unterstützt optgroup. Suche für
group by
Ausdruck inselect
Richtlinie.danke. Ich landete mit lo-dash
Wille geschieht in dem Fall, dass es ein Ort Hinzugefügt/entfernt? Wird die zugehörige Kategorie Hinzugefügt werden/entfernt, wenn er ist die einzige Instanz in Orte?
InformationsquelleAutor Tosh
Hier ist eine einfache und generische Beispiel.
Filter:
Markup:
InformationsquelleAutor Erik Trautman
Ich beschlossen, zu erweitern @thethakuri Antwort, damit jede Tiefe für das einzige Mitglied. Hier ist der code. Dies ist für diejenigen, die nicht wollen, um die gesamte AngularUI-Modul nur für diese Funktionalität. Wenn Sie bereits mit AngularUI, ignorieren Sie diese Antwort:
Beispiel
InformationsquelleAutor kennasoft
UPDATE
War ich recomending den Gebrauch von Gesetzt, aber leider funktioniert das nicht bei ng-repeat, noch Karte, da ng-repeat funktioniert nur mit Arrays. So ignorieren Sie diese Antwort. sowieso wenn Sie brauchen, um Duplikate herausfiltern eine Weise ist, wie andere gesagt hat, mit
angular filters
, hier ist die link für Sie zu dem Bereich erste Schritte.Alte Antwort
Yo können die ECMAScript 2015 (ES6) standard-Daten-Struktur, anstelle einer Array-Datenstruktur auf diese Weise filtern Sie wiederholt Werte, die beim hinzufügen zu dem Satz. (Denken Sie daran-sets erlauben nicht, dass wiederholte Werte). Wirklich einfach zu bedienen:
InformationsquelleAutor CommonSenseCode
Hier die Vorlage-nur der Weg, es zu tun (es ist nicht die Aufrechterhaltung der Ordnung, obwohl). Plus, wird das Ergebnis da auch bestellt, die ist in den meisten Fällen nützlich:
InformationsquelleAutor shoesel
Hatte ich ein array von strings, die nicht Objekte und früher habe ich diesen Ansatz:
mit diesem filter:
InformationsquelleAutor Helzgate
Es scheint, jeder ist mit seiner eigenen version des
unique
filter in den ring, also werde ich das gleiche tun. Kritik ist sehr willkommen.InformationsquelleAutor L S
Wenn Sie möchten, um einzigartige Daten auf der Grundlage der verschachtelten Schlüssel:
Nennen mag :
InformationsquelleAutor thethakuri
Keines der oben genannten Filter behoben, mein Problem, also musste ich kopieren Sie die filter aus offiziellen github doc. Und verwenden Sie es dann, wie bereits in den obigen Antworten
return-Funktion (Gegenstände, filteraktiv) {
InformationsquelleAutor Black Mamba
Fügen Sie diesen filter:
Aktualisieren Sie Ihre markup:
InformationsquelleAutor Shawn Dotey
Dies vielleicht overkill, aber es funktioniert für mich.
Die distinct-Funktion hängt von der Funktion enthält, die oben definiert werden. Es kann aufgerufen werden als
array.distinct(prop);
wo prop ist die Immobilie, die Sie wollen, zu unterscheiden.So konnte man nur sagen
$scope.places.distinct("category");
InformationsquelleAutor Ikechi Michael
Erstellen Sie Ihre eigenen array.
InformationsquelleAutor Akhilesh Kumar