grep vs jQuery过滤?

我想知道Grep和Filter之间的区别:

filter:

将匹配元素的集合减less为匹配select器或通过函数testing的元素。

Grep:

查找满足filterfunction的数组元素。 原始数组不受影响。

好。

所以如果我在GREP中这样做:

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); }); 

我也可以这样做:

  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); }); 

在这两种情况下,我仍然可以访问原始数组…

所以…区别在哪里?

它们都以类似的方式运行,但是它们的用途是不同的。

过滤函数是为了与html元素一起使用,这就是为什么它是一个可链接的函数,它返回一个jQuery对象,它接受像“:even”,“:odd”或“:visible”等filter。用grep函数来实现这个function,这个function是为了实现数组的实用function。

filter是jQuery.fn的一部分,所以它的目标是用于select器$('div').filter其中grep是一个jQuery工具方法( jQuery.grep

用法上的差异:

过滤:

 $(selector).filter(selector/function) 

grep的:

 $.grep(array,function,invert) 

所以在你的情况下,我宁愿使用grep()因为使用数组这种方式是不必要的: $(arr)

我也假设grep函数更快,因为它只接受数组。

对于那些对grep如何执行filter感兴趣的人,我写了这个testing:

TLDR; Grep快了好几倍。

我用于testing的脚本:

 function test(){ var array = []; for(var i = 0; i<1000000; i++) { array.push(i); } var filterResult = [] for (var i = 0; i < 1000; i++){ var stime = new Date(); var filter = array.filter(o => o == 99999); filterResult.push(new Date() - stime); } var grepResult = []; var stime = new Date(); var grep = $.grep(array,function(i,o){ return o == 99999; }); grepResult.push(new Date() - stime); $('p').text('average filter - '+(filterResult.reduce((pv,cv)=>{ return pv +cv},0)/1000)) $('div').text('average grep - '+(grepResult.reduce((pv,cv)=>{ return pv + cv},0)/1000)) } test(); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <p></p> <div></div> 

@Matas Vaitkevicius,代码片段提交错误,这里是一个更正的一个:

 function test(){ var array = []; for(var i = 0; i<1000000; i++) { array.push(i); } var filterResult = [] for (var i = 0; i < 1000; i++){ var stime = new Date(); var filter = array.filter(o => o == 99999); filterResult.push(new Date() - stime); } var grepResult = []; for (var i = 0; i < 1000; i++){ var stime = new Date(); var grep = $.grep(array,function(i,o){ return o == 99999; }); grepResult.push(new Date() - stime); } $('p').text('average filter - '+(filterResult.reduce((pv,cv)=>{ return pv +cv},0)/1000)) $('div').text('average grep - '+(grepResult.reduce((pv,cv)=>{ return pv + cv},0)/1000)) } test(); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <p></p> <div></div>