在 jQuery 中使用 grep 编写通用过滤器

writing generic filter using grep in jQuery

本文关键字:过滤器 grep jQuery      更新时间:2023-09-26

有没有办法编写以下代码更通用?

var result = $.grep(myObjectArray, function(e){ 
    return e.Prop1 == 'SomeVal';
});

这就是我想做的。

一个泛型函数,它将接受myObjectArray(要筛选的对象数组)、Prop1(属性名称)和SomeVal(要筛选的值)作为参数。

我面临的问题是我不知道如何在对象中找到 PropertyName,因为它可以是任何东西。

任何帮助将不胜感激。

function filterObjectArray(myObjectArray, prop1, someVal) {
    return $.grep(myObjectArray, function (e) {
        return e[prop1] === someVal;
    };
}

请注意使用方括号语法进行对象属性访问。

要从对象获取属性,只需使用

myObject[Prop1]

若要确定对象是否具有属性,请使用

myObject.hasOwnProperty(Prop1)

它可以像这样通用吗?

function filterArray(inputArray,customFunction){
 return $.grep(inputArray, function(e){       return customFunction(e);  });
}

其中customFunction可以是用户定义的函数,用于将对象限定为选定对象

例:

var sampleArray = [{name:"Ahamed",age: 21}, 
                   {name:"AhamedX",age: 21}, 
                   {name:"Babu",age: 25}, 
                  {name:"Mustafa",age: 27} ];
function nameComparator(obj){
       return obj["name"]=="Ahamed";
}
function ageFilter(obj){
    return obj["age"]>=25;
 }

var filteredArray=filterArray(sampleArray,nameComparator);
alert(filteredArray.length);
var filteredArray=filterArray(sampleArray,ageFilter);
alert(filteredArray.length);

小提琴链接 : http://jsfiddle.net/MAq6c/