LinQer是一个库,它无需解决Javascript的内置迭代方法的两个问题。它将.NET的LINQ方法引入数据库到JavaScript。
需要修复的迭代方法存在的问题主要是:
它们仅适用于数组然后
他们很渴望,这意味着经过间歇性转换的集合是完整的集合,即使只需要其中的几个项目:
“每次过滤或映射某些对象时,都会创建一个新数组”。
LinQer引入了一个称为Enumerable的类,就像它的.NET对应类一样,它包装了任何可迭代的结构,例如生成器,而不仅仅是数组,它提供了在.NET Enumerable支持的同一接口下使用它们的方法。例如,对Enumerable实例的相当有效的操作如下:
常量结果=枚举
.where(item => !! item.value)
.select(item => {value:item.value,key:item.name})
.groupBy(item => item .key)
.where(g => g.length> 10)
.orderBy(g => g.key)
.selectMany()
.skip(15)
.take(5);
因此,除了内置的map,filter和reduce操作外,LinQer还使用这些丰富的结构扩展了Javascript。尽管如此,由于C#和Javascript之间的不匹配,仍未实现.NET Emumerable的全部方法;在Javascript的上下文下,有些事情没有意义。因此,toDictionary,toHashSet,toLookup,toList已被省略,而使用了toMap,toSet,toObject和toArray。加入操作也被忽略了。
LinQer是用Typescript编写的,在后台使用了生成器并进行了懒惰的评估。因此,现在我们可以将操作限制为仅关注转换中的集合项。
LinQer分为两个部分,即Linqer.slim.js和Linqer.js。前者提供了基本方法,而后者(包括大部分)包括.NET在内的所有原始.NET Enumerable方法(大部分)都可以使用,因此您可以选择一种适合当前情况的方法。有关受支持方法的完整参考,请转到其Github存储库。
除了回购之外,作者现在还以npm软件包的形式提供该库,使其安装过程非常简单:
$ npm install @ siderite / linqer
最后,快速学习编写Linq查询的技巧是掌握令人惊叹的.NETLINQPadtool并进行使用以了解查询的工作原理,然后您就可以通过LinQer将它们逐字移植到JavaScript程序中并享受其强大功能JavaScript中的Linq!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。