最近在看关于jq的相关内容正好看到了关于数组筛选的相关内容就做了些整理。
筛选数组是对需要频繁处理大量数据的应用来说的并且遍历数组主要是查找(筛选)匹配一定标准的元素。数组中我们在查找高于或低于特定临界值,或者可能是匹配一些数据时,jq就提供了一个函数$.grep()。
$.grep() 方法是按照某种条件来过滤数组。
$.grep(array,callback,invert) //调用的方式
array:待过滤数组;
callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数,第一个是当前数组元素的值,一个是当前数组元素的下标,即元素索引值。此函数应返回一个布尔值。
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函数过滤掉的元素。
再来个例子看看$.grep()
var nums = '1,2,3,4,5,jQuery,CSS,5'.split(',');
如果我们想找出其中的字符串,我们可以直接使用 $.grep() 方法来完成:
nums = $.grep(nums, function (num, index) {
// num = 数组元素的当前值
// index = 当前值的下标
return isNaN(num);}); //isNaN() 函数用于检查其参数是否是非数字值。
console.log(nums); //结果为: ["jQuery", "CSS"]
看到这肯定都想到了$.map() 方法也可将一个数组转换为另一个数组,所以,使用 $.map() 方法也可以完成上面例子中的要求,如下:
nums = $.map(nums, function (num, index) {
//和$.grep() 的区别
//return isNaN,得到结果为:[true, true]
return isNaN(num) ? num : null;});
console.log(nums); // ["jQuery", "CSS"]