2012-05-19 158 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