2012-05-19 157 views
0

我想將一個比較器傳入一個函數,並不確定這是否可以用Javascript。 C#中有一個IComparer概念來完成這個任務。這可以在Javascript中完成嗎?如何通過函數來​​比較項目?

function someAction (comparer) { 
    var newList = []; 
     $.each(list, function (index, item) { 
      if comparer on item is true then { //psuedo code 
       newList.push(item); 
      } 
     }); 
} 

someAction(item.PropA > 5); 

回答

4

 
function someAction (comparer) { 
    var newList = []; 
     $.each(list, function (index, item) { 
      if (comparer(item)) { 
       newList.push(item); 
      } 
     }); 
} 
someAction(function (item) { return item.PropA > 5 }); 

PS:作爲@BrokenGlass建議,你能避免重蹈覆轍,並使用filter功能。

0

只需調用該函數:

if (comparer(item)) { ... } 

在JavaScript函數的所有引用都是等價的,所以任何引用可用於以同樣的方式任何其他的參考可以被用來調用的函數。換句話說,函數是第一類對象。

0

你可能會尋找filter,已經存在在JavaScript:

var newList = list.filter(function(item) { 
    return item.PropA > 5; 
}); 
+1

應當指出的是,過濾器只是因爲ECMAScript中5可用。 – helpermethod