Ich habe mich über die Unterschiede zwischen Grep und Filter gewundert:
Filter:
Reduzieren Sie den Satz übereinstimmender Elemente auf diejenigen, die dem Selektor entsprechen, oder bestehen Sie den Funktionstest.
Grep:
Findet die Elemente eines Arrays, die eine Filterfunktion erfüllen. Das ursprüngliche Array ist nicht betroffen.
OK.
Also, wenn ich das in GREP mache:
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
myNewArray= jQuery.grep(arr, function(n, i){
return (n != 5 && i > 4);
});
Ich könnte auch tun:
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
myNewArray= $(arr).filter( function(n, i){
return (n != 5 && i > 4);
});
In beiden Situationen kann ich immer noch auf das ursprüngliche Array zugreifen ...
Also ... wo ist der Unterschied?
.grep()
ist eine Hilfsmethode für die allgemeine Array-Verarbeitung, während sie.filter()
normalerweise zum Eingrenzen der Elementauswahl verwendet wird. Ich glaube nicht, dass.grep()
ein jQuery-Objekt zurückgegeben wird, und Sie können es nicht verketten (jQuery.fn.grep
existiert nicht).$(arr).filter
<- dies ist nicht erforderlich, tun Sie esarr.filter
stattdessen.Antworten:
Sie funktionieren beide auf ähnliche Weise, unterscheiden sich jedoch in ihrer Verwendung.
Die Filterfunktion soll für HTML-Elemente verwendet werden. Aus diesem Grund handelt es sich um eine verkettbare Funktion, die ein jQuery-Objekt zurückgibt und Filter wie ": gerade", ": ungerade" oder ": sichtbar" usw. akzeptiert. Dies tun Sie nicht mit der grep-Funktion, die als Dienstprogramm für Arrays gedacht ist.
quelle
Filter ist Teil von jQuery.fn, daher ist es das Ziel, mit Selector verwendet zu werden,
$('div').filter
wobei grep eine jQuery-Tool-Methode ist (jQuery.grep
)quelle
Der Unterschied in seiner Verwendung:
Filter:
Grep:
In Ihrem Fall würde ich lieber verwenden,
grep()
da die Verwendung des Arrays auf diese Weise nicht erforderlich ist :$(arr)
.Ich nehme auch an, dass die
grep
Funktion schneller ist, weil sie nur Arrays akzeptiert.quelle
Für diejenigen, die daran interessiert sind, wie
grep
gegen sie vorgeht, habefilter
ich diesen Test geschrieben:TLDR; Grep ist um ein Vielfaches schneller.
Skript, das ich zum Testen verwendet habe:
quelle
@Matas Vaitkevicius, das veröffentlichte Code-Snippet enthält Fehler. Hier ist ein korrigierter:
TLDR: In Firefox ist der Filter etwas schneller, in Chrome ist das Gegenteil der Fall . Nur in Bezug auf Leistungen können Sie jeden verwenden.
quelle