什么是领先的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
,成为filter
, First
和FirstOrDefault
成为[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库中最快的。