jQuery的grep()方法是为了传入一个数组elems,通过过滤器callback后,等到过滤后的结果。其中callback就是过滤器,$.grep是根据其返回值过滤; inv为true表示是callback过滤器返回true的那些被过滤掉。
1、grep()的用法:
$.grep( [0,1,2], function(n,i){
return n <= 0;
});
结果:[0]
$.grep( [0,1,2], function(n,i){
return n <= 0;
}, true);
结果:[1, 2]
2、jQuery的grep()源码如下:
grep: function(elems, callback, inv) {
var retVal, ret = [], i = 0, length = elems.length;
inv = !!inv;//转成布尔型
for (; i < length; i++) {
retVal = !!callback(elems[i], i); // 注意callback的参数是先value后key
if (inv !== retVal)
ret.push(elems[i]);
}
return ret;
},
注意:grep()设计的callback接受的参数顺序与each()的callback不一致(grep()是先value后key,each()是先key后value),这样设计的原因是往往过滤器只需使用value,这样就可以忽略第二个参数了。