为 ES2018 移植的 LINQ 方法
源码:https://github.com/Martin1994/es2018-linq
NPM:https://www.npmjs.com/package/es2018-linq
前言
自我在短暂的金融业生涯中短暂地接触过 C# 之后,对 C# / .NET 的喜爱便一发不可收拾,即便从此之后的工作中再没机会使用 .NET 却依然保持着对其的关注,而这份关注与喜爱这也一直延续到了 Andre 老爷子如今的工作重心——TypeScript。
最近在工作中大量使用了 TypeScript,但却苦于没有合适的函数式编程工具箱。underscore/lodash 对异步方法的支持有限且不支持延迟执行;RxJS 又感觉太过重量级、强制异步,而 API 又自成一派。有 C# 背景的我自然是以 LINQ 对标这些库,所以我想要不干脆自己移植一份 LINQ 好了。
LINQ
有些朋友可能对 C# 或是 LINQ 不太了解,在这里做一下简单的介绍。
LINQ 最初是设计成在 C# 代码中可以用类似 SQL 的方式操作一个可迭代对象(Enumerable),可以是普通的本地数据结构,甚至也可以是封装好的数据库操作。例如这个官方提供的样例:
1 2 3 4 5 6 7 |
int[] scores = new int[] { 97, 92, 81, 60 }; // Define the query expression. IEnumerable<int> scoreQuery = from score in scores where score > 80 select score; |
然而据我的理解,真正在代码里用 LINQ 语句的人并不多……大多数情况 LINQ 是直接通过扩展方法调用的:
1 2 3 4 |
int[] scores = new int[] { 97, 92, 81, 60 }; // Call LINQ methods IEnumerable<int> scoreQuery = scores.Where(score => score > 80); |