从Javascript代码中删除大量for循环

时间:2012-03-02 13:42:19

标签: javascript lambda functional-programming anonymous-function

我正在为Web应用编写一些代码,这些代码经常需要过滤掉一系列javascript对象以返回对象的子集。我发现在我的代码中,我最终得到了许多for循环。我打算编写一个原型函数,它可以使用传入的函数返回一个过滤的子集,类似于C#的LINQ lambda或Scala的过滤器,但我不禁认为这已经完成了,无论是在核心语言还是在外部图书馆,我正在重新发明轮子。

是否有一种首选方法可以功能性地返回Json对象的已过滤子集,而不会通过我的代码遍历for循环。语法不相关,但构造和概念类似于:

var filteredObj = obj.filter(function() {... filter function ...});

4 个答案:

答案 0 :(得分:3)

你看过underscore吗?

有大量功能性编程工具,包括mapfilterreduce

在该库中有很多很棒的实用工具,它使JavaScript变得更多,更好,更具功能性。

答案 1 :(得分:2)

jQuery有一个grep() function,它可以过滤一组对象。

当您需要递归或想要过滤每个对象的属性时,事情会变得丑陋,因为过滤器函数可能依赖于上下文。

答案 2 :(得分:0)

这实际上是一个非常好的主意。你可以做这样的事情

Array.prototype.Where = function(filterFn){

   var i, results = [];

   for (i = 0; i < this.length; ++i){
      if (filterFn.call(this, this[i])){
          results.push(this[i]);
      }
   }

   return results;
};

然后确保json中的每个Array都有一个Where方法可以用来过滤(就像linq一样)。

答案 3 :(得分:0)

如果您定位的浏览器受众群体支持JavaScript 1.6及以上mapfilter是核心语言的一部分,则不需要图书馆支持。有趣的是,JavaScript 1.8还在核心语言中引入了array reduce方法。