我正在为Web应用编写一些代码,这些代码经常需要过滤掉一系列javascript对象以返回对象的子集。我发现在我的代码中,我最终得到了许多for
循环。我打算编写一个原型函数,它可以使用传入的函数返回一个过滤的子集,类似于C#的LINQ lambda或Scala的过滤器,但我不禁认为这已经完成了,无论是在核心语言还是在外部图书馆,我正在重新发明轮子。
是否有一种首选方法可以功能性地返回Json对象的已过滤子集,而不会通过我的代码遍历for循环。语法不相关,但构造和概念类似于:
var filteredObj = obj.filter(function() {... filter function ...});
答案 0 :(得分:3)
答案 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及以上map且filter是核心语言的一部分,则不需要图书馆支持。有趣的是,JavaScript 1.8还在核心语言中引入了array reduce方法。