underscore.js filtern ein Array von Objekten basierend auf einem anderen
Ich versuche zum filtern von einem array von Objekten basiert auf einem anderen. Die common-property-id id
.
Ich bin mir nicht sicher-filter + jeder ist der beste Weg, es zu tun oder Karte reduzieren. Trotzdem, der code unten funktioniert nicht so out
ist die leere Liste.
var aaa = [
{name: "AAA", id: 845},
{name: "BBB", id: 839},
{name: "CCC", id: 854}
];
var bbb = [
{id: 839},
{id: 854}
];
var out = _.filter(aaa, function(val){
return _.each(this, function(val2){
return val['id'] === val2['id']
});
}, bbb);
InformationsquelleAutor der Frage bsr | 2013-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie einfach ein "set" von den gültigen ids und verwenden Sie "set", um die Filterung:
Füllung
ids
ist schnell, es ist in der n * abgeschrieben O(1), ich.e O(n). Dasselbe gilt für die Filterung.Wenn Sie
each(…)
in der inneren Loop-Schleife wird O(n2). Für größere Datenmengen würde dies nur sehr langsam. Auch die zusätzliche Schachtelung machen den code schwerer zu Lesen/verstehen auf den ersten Blick.Sehen, dass code-snipped in Aktion: http://jsfiddle.net/SMtX5/
InformationsquelleAutor der Antwort kay
können Sie
_.find
zu filtern:InformationsquelleAutor der Antwort anhulife
Können Sie
_.einige(Liste, [iterator], [Kontext])
.Gibt es wahrwenn einer der Werte in der Liste pass die iterator Wahrheit test.
Hier ist jsfiddle. http://jsfiddle.net/h98ej/
InformationsquelleAutor der Antwort pktangyue
Brauchen Sie nur Reine JS-array-Funktionen zu tun, vorausgesetzt, Ihr nutzen Fall.
InformationsquelleAutor der Antwort Tony Broyez