我正在寻找一个JavaScript库,它允许我使用类似LINQ的语法查询复杂的JSON对象 . 快速搜索找到了几个看起来可能提供我需要的有前景的选项:
-
有没有人有使用它们的经验?
-
有什么优点和缺点?
-
性能是否可比?
-
LINQ to JavaScript的函数传递语法是否提供了任何隐藏的好处(我个人认为jLinq的语法乍一看更具吸引力)?
-
你发现在这两个项目中缺少什么?
-
你有没有试过联系作者?他们的反应如何?
-
哪个项目使用得更广泛?
EDIT:
今天刚看到这个:jslinq .
我认为这将是第一个彻底试用的人 .
10 回答
我最近为JavaScript创建了一个LINQ库 . 它实现了.NET提供的大多数LINQ函数,它是所有LINQ库中最快的 .
http://fromjs.codeplex.com/
你看过Rx for Javascript了吗?那正是你想要的 .
你可能想看看 linq.js . 它遵循.NET lambda语法,并且看起来很好地集成在Microsoft环境中 .
LINQ for JavaScript - http://linqjs.codeplex.com/
优点
实现所有.NET 4.0方法
完成懒惰评估
对VisualStudio的完整IntelliSense支持
支持jQuery
支持Windows脚本宿主
绑定JavaScript(RxJS)和IntelliSense生成器的Reactive Extensions
NuGet安装支持
最近更新(2011年1月最后一次发布)
语法符合C#中的lambda语法
缺点
linq.js库有点大 .
如果您已经在使用jQuery或其他js库,则最常用的功能可能已经可用 . 特别参见jQuery的filter和'Any'方法 .
最基本和最常用的Linq运算符在广泛使用的JS库中非常常见 . 它们只有不同的名称(实际上,它们的名称比Linq更为传统) .
Select
变为map
,_Where
变为filter
,First
和FirstOrDefault
变为[0]
.几乎没有我知道的库(包括我认为你链接的那些)在.NET Linq中使得实现变得懒惰,他们只是立即使用数组进行评估 .
对于一组非常好的,完整的功能列表操作,请尝试:http://osteele.com/sources/javascript/functional/
我建议看一下underscore.js . 它不像其他一些直接的LINQ端口,但是非常舒适"LINQ-like"体验 . 它支持我需要的所有过滤器,排序和项目选项,并具有出色的文档和社区支持 .
作为Knockout用户的奖励,有UnderscoreKO添加了Underscore 's array methods to Knockout'的可观察数组 . Demo
我个人在.NET中找到LINQ / set操作Union,Intersect,Except和Distinct on enumerables . 很有用 . 有一个名为jQuery Array Utilities的jquery插件,它提供了在数组上使用的这些方法 .
代码示例:
返回[1,2,3]
返回[1,2,3,4,5]
返回[2,3]
返回[1,2]
$linq: http://jscriptlinq.codeplex.com/
有一些重复的库试图使用类似的语法和方法名称将LINQ移植到JavaScript . 但是,在JS社区中,真正受欢迎并提供相同功能的库是Underscore.js .
我已经尝试了大部分 - 我真的很喜欢$ linq:http://jscriptlinq.codeplex.com/最好的 . 它只是按照您期望的c#linq工作的方式工作 - 包括链能力 .
我自己也在寻找这样的东西并遇到过......
http://www.hugoware.net/Projects/jLinq
这看起来真的很棒!也许我只是不理解Rx和observables与通过jQuery之类的东西设置事件处理程序相比 .