首页 文章

什么是领先的JavaScript库LINQ? [关闭]

提问于
浏览
94

我正在寻找一个JavaScript库,它允许我使用类似LINQ的语法查询复杂的JSON对象 . 快速搜索找到了几个看起来可能提供我需要的有前景的选项:

LINQ to JavaScriptjLinq

  • 有没有人有使用它们的经验?

  • 有什么优点和缺点?

  • 性能是否可比?

  • LINQ to JavaScript的函数传递语法是否提供了任何隐藏的好处(我个人认为jLinq的语法乍一看更具吸引力)?

  • 你发现在这两个项目中缺少什么?

  • 你有没有试过联系作者?他们的反应如何?

  • 哪个项目使用得更广泛?

EDIT:

今天刚看到这个:jslinq .

我认为这将是第一个彻底试用的人 .

10 回答

  • 0

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

    http://fromjs.codeplex.com/

  • 4

    你看过Rx for Javascript了吗?那正是你想要的 .

  • 13

    你可能想看看 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'方法 .

  • 1

    最基本和最常用的Linq运算符在广泛使用的JS库中非常常见 . 它们只有不同的名称(实际上,它们的名称比Linq更为传统) . Select 变为 map ,_ Where 变为 filterFirstFirstOrDefault 变为 [0] .

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

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

  • 10

    我建议看一下underscore.js . 它不像其他一些直接的LINQ端口,但是非常舒适"LINQ-like"体验 . 它支持我需要的所有过滤器,排序和项目选项,并具有出色的文档和社区支持 .

    作为Knockout用户的奖励,有UnderscoreKO添加了Underscore 's array methods to Knockout'的可观察数组 . Demo

  • 32

    我个人在.NET中找到LINQ / set操作Union,Intersect,Except和Distinct on enumerables . 很有用 . 有一个名为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]

  • 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
    
  • 3

    有一些重复的库试图使用类似的语法和方法名称将LINQ移植到JavaScript . 但是,在JS社区中,真正受欢迎并提供相同功能的库是Underscore.js .

  • 2

    我已经尝试了大部分 - 我真的很喜欢$ linq:http://jscriptlinq.codeplex.com/最好的 . 它只是按照您期望的c#linq工作的方式工作 - 包括链能力 .

  • 68

    我自己也在寻找这样的东西并遇到过......

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

    这看起来真的很棒!也许我只是不理解Rx和observables与通过jQuery之类的东西设置事件处理程序相比 .

相关问题