什么是领先的LINQ for JavaScript库?

我正在寻找一个JavaScript库,这将允许我使用类似LINQ的语法来查询复杂的JSON对象。 快速search发现了几个有前途的选项,看起来他们可能提供我所需要的:

LINQ to JavaScript和jLinq

  • 有没有人使用它们的经验?
  • 有什么优点和缺点?
  • 性能是否可比?
  • LINQ to JavaScript的函数传递语法是否提供了任何隐藏的好处(我个人首先发现jLinq的语法更吸引人)?
  • 你在这两个项目中发现了什么?
  • 你有没有尝试联系作者? 他们的反应如何?
  • 什么项目更广泛使用?

编辑:

刚才看到这个: jslinq 。

我认为这将是第一个彻底尝试。

你见过Rx的Javascript吗? 那就是你想要的。

你可能想看看linq.js。 它遵循.NET lambda语法,并且看起来很好地集成在Microsoft环境中。

LINQ for JavaScript – http://linqjs.codeplex.com/

优点

  • 实现所有的.NET 4.0方法
  • 完成懒惰评估
  • VisualStudio全面支持IntelliSense
  • 支持jQuery
  • 支持Windows脚本主机
  • 绑定JavaScript(RxJS)和IntelliSense生成器的无功扩展
  • NuGet安装支持
  • 最近更新(2011年1月发行)
  • 语法符合C#中的lambda语法

缺点

  • linq.js库有点大。
  • 如果您已经在使用jQuery或其他js库,那么最常用的function可能已经可用了。 尤其请看jQuery的filter和'Any'方法。

最常用的Linq运算符是在广泛使用的JS库中定义的。 他们只是有不同的名字(实际上,他们比Linq有更多的传统名字)。 Select成为map ,成为filterFirstFirstOrDefault成为[0]

几乎没有我知道的库(包括我认为你链接的那些库)在.NET Linq中懒得实现懒惰,他们只是使用数组立即进行评估。

对于一个非常好的,完整的function列表操作,请尝试: http : //osteele.com/sources/javascript/functional/

我build议看看underscore.js 。 它不像其他一些LINQ端口那样直接,而是一种非常舒适的“LINQ-like”体验。 它支持我需要的所有筛选器,sorting和项目选项,并具有出色的文档和社区支持。

作为Knockout用户的奖励, UnderscoreKO将Underscore的数组方法添加到Knockout的可观察数组中。 演示

我个人发现LINQ /设置操作联盟,相交,除了在.NET中的枚举。 很有用。 有一个名为jQuery Array Utilities的jquery插件,它提供了在数组上使用这些方法。

代码示例:

 $.distinct([1, 2, 2, 3]) 

返回[1,2,3]

 $.union([1, 2, 2, 3], [2, 3, 4, 5, 5]) 

返回[1,2,3,4,5]

 $.instersect([1, 2, 2, 3], [2, 3, 4, 5, 5]) 

返回[2,3]

 $.except([1, 2, 2, 3], [3, 4, 5, 5]) 

返回[1,2]

$ linq: http : //jscriptlinq.codeplex.com/

 var users = [{username: "asmith", domain: "north_america"}, {username: "tmcfarland", domain: "europe"}, {username: "cdeckard", domain: "nort_america"}]; var groups = [{user: "ASMITH", groupName: "base_users"}, {user: "TMCFARLAND", groupName: "admins"}, {user: "CDECKARD", groupName: "base_users"}, {user: "CDECKARD", groupName: "testers"}]; var results = $linq(users).join(groups, function (x) { return x.username; }, // key for 'users' "x => x.user", // key for 'groups' function (outer, inner) // function to generate results { return "user: " + outer.username + ", domain: " + outer.domain + ", group: " + inner.groupName; }, "(x, y) => x.toLowerCase() == y.toLowerCase()"); // compare keys case-insensitively 

有一些重复库试图将LINQ to JavaScript移植到类似的语法和方法名称。 但是,在JS社区,越来越stream行并提供相同function的库是Underscore.js 。

我已经尝试了大部分 – 我真的很喜欢$ linq: http : //jscriptlinq.codeplex.com/最好的。 它只是简单的工作,你会希望c#linq的工作 – 包括链能力。

我正在寻找像这样的东西,并遇到…

http://www.hugoware.net/Projects/jLinq

这看起来非常棒! 也许我只是不明白的Rx和观察点相比,通过像jQuery的设置事件处理程序。

我最近做了一个JavaScript的LINQ库。 它实现了.NET提供的大多数LINQ函数,它是所有LINQ库中最快的。

http://fromjs.codeplex.com/