在jQuery中Grep vs Filter?

Roy*_*mir 81 jquery filter

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

过滤:

将匹配元素集减少到与选择器匹配的元素或传递函数的测试.

Grep:

查找满足过滤函数的数组元素.原始数组不受影响.

好.

所以,如果我在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);
});
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

 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);
});
Run Code Online (Sandbox Code Playgroud)

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

所以......区别在哪里?

ome*_*irk 129

它们都以类似的方式起作用,但它们的用法不同.

filter函数旨在与html元素一起使用,这就是为什么它是一个可链接的函数,它返回一个jQuery对象,它接受像":even",":odd"或":visible"等过滤器.你可以'使用grep函数执行此操作,该函数旨在用于数组的实用程序函数.

  • 测试发现目前 .filter() 在 IE 和 Microsoft Edge 中都有效。 (3认同)

Gil*_*esC 17

Filter是jQuery.fn的一部分,所以它的目标是与选择器一起使用,$('div').filter其中grep是一个jQuery工具方法(jQuery.grep)


小智 6

它的用法不同:

过滤:

$(selector).filter(selector/function)
Run Code Online (Sandbox Code Playgroud)

grep的:

$.grep(array,function,invert)
Run Code Online (Sandbox Code Playgroud)

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

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