基于ES6新特性的Iterator的Linq

在GitHub上的源代码
兼容ES5!主流的浏览器都可用!

介绍

Linq就是C#上面的linq。
没有完全实现,毕竟要根据js进行本地化处理。
为了提高自由度,也不主动抛出异常。
没有实现的方法是:Single,Cast,AsEnumerable,ToList。
用ToMap方法代替ToDictionary方法。ES6的Map很好地代替了C#的Dictionary呢。
Iterator代替IEnumerator,Iterable代替IEnumerable。

例子

一时没想到有意思的例子,就简单举两个。

var uf = Iterable.Range(0, Number.MAX_VALUE); 
var f1 = uf.Where(function (v) { return v % 2 === 0; }); 
var f2 = uf.Where(function (v) { return v % 3 === 0; }); 
var foo= f1.Zip(f2, function (x, y) { return x * y; }).Take(10);

求前十个能被2整除的自然数与前十个能被3整除的自然数的乘积的集合。在ES6可以这样被打印。

for(var v of foo){ 
console.log(v); 
}

ES6以前用ForEach方法代替for...of...语法

foo.ForEach(function (v) { 
console.log(v);
 });

结果如下:

基于ES6新特性的Iterator的Linq_第1张图片
可以传入有Symbol.Iterator属性的对象初始化Iterable:
Iterable(['hello', 'world']).SelectMany(function (v) { return v; }).ToArray();
结果如下:

用途

可以用作处理数据流。
也可以在轻便的环境下练习linq的使用。

最后

感谢大家的阅读,欢迎指出bug及建议。

你可能感兴趣的:(基于ES6新特性的Iterator的Linq)