$.grep()的用法
grep()方法用于数组元素过滤筛选
grep(array,callback,invert)
array:待过滤数组;
callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数,第一个是当前数组元素的值,一个是当前数组元素的下标,即元素索引值。此函数应返回一个布尔值。另外,此函数可设置为一个字符串,当设置为字符串时,将视为“lambda-form”(缩写形式?),其中 a 代表数组元素,i 代表元素索引值。如“a > 0”代表“function(a){ return a > 0; }”
invert:布尔型可选项,默认值false,值为true或false, 如果 “invert” 为 false 或为设置,则函数返回数组中由过滤函数返回 true 的元素,当”invert” 为 true,则返回过滤函数中返回 false 的元素集。
var arr=$.grep([0,1,2,3,4,5,6],function(n,i){
return n>2
});
上面的例子返回[3,4,5,6],但是我们给invert的值为true,例如
var arr=$.grep([0,1,2,3,4,5,6],function(n,i){
return n>2
},ture);
所以现在返回的是[0,1,2],也就是被callback函数过滤掉的元素。
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ]; arr = jQuery.grep(arr, function( n, i ) { if( n !== 5 && i > 4){ return true; } }); 等价于: arr = jQuery.grep(arr, function( n, i ) { return ( n !== 5 && i > 4 ); });
OA差旅用到该函数来筛选起飞时间:
define(function (require, exports, module) { var init = function() { //outsideArr是要去进行筛选的原始数组 var outsideArr=[ { 'depTime':0020, 'name':'xiaohua' },{ 'depTime':0050, 'name':'dahua' },{ 'depTime':0025, 'name':'laohua' } ] //innerArr为筛选条件数组 var innerArr=[ { 'start':0010, 'end':0030 } ]; var innerArrNew={ 'start':0010, 'end':0030 }; //$.grep()函数中,第一个参数为数组,第二个参数为true时,返回数组, //每次取出数组outsideArr的一个对象和筛选数组innerArr循环进行判断 //一旦该数组outsideArr的该对象满足筛选数组innerArr的任何一个条件,则flag=true //所以当flag=true时,返回outsideArr的数组该元素 var ephemeralsec = $.grep(outsideArr, function (item, index) { var flag = false; $.each(innerArr, function(i, subItem) { if (item.depTime > subItem.start && item.depTime <= subItem.end) { flag = true; } }); if (flag) { return true;//返回值为true时,相当于返回的是outsideArr数组中的item } }); //如果筛选条件不是数组,则变成我们常见的形式,没有对里面筛选条件的循环 var ephemeralthree = $.grep(outsideArr, function (item, index) { if (item.depTime > innerArrNew.start && item.depTime <= innerArrNew.end) { return true; } }); console.log(ephemeralthree); }; module.exports = init; });
用图片显示:
// 选择航空公司筛选(和上面时间筛选不一样,是因为时间要筛选一个范围的值,而下面的筛选选择包含的值)
// 选择出发机场筛选 if (filterselected.depAirdrome.length > 0){ ephemeral = $.grep(ephemeral, function (item, index) { if($.inArray(item.depAirdrome, filterselected.depAirdrome) != -1) { return true; } }); }