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

 

posted @ 2017-01-09 19:00  小猪冒泡  阅读(2325)  评论(0编辑  收藏  举报