2012-06-26 57 views
0

有沒有辦法讓我可以編寫下面這段代碼來更通用?在jQuery中使用grep編寫通用過濾器

var result = $.grep(myObjectArray, function(e){ 

    return e.Prop1 == 'SomeVal'; 

}); 

這就是我想要做的。

一個通用函數,它將接受myObjectArray(要過濾的對象數組),Prop1(屬性名稱)和SomeVal(要過濾的值)作爲參數。

我面臨的問題是,我不知道如何在對象中找到PropertyName,因爲它可以是任何東西。

任何幫助將不勝感激。

回答

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

注意使用方括號語法爲對象屬性訪問。

1

從對象獲得的財產,只是用

myObject[Prop1] 

要確定對象是否有一個屬性,使用

myObject.hasOwnProperty(Prop1) 
0

它可以是這樣的通用?

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/