linqes
地址
安装
npm i -s linqes
效果
导入之后会自动挂载在Array的原型上
import 'linqes'
[1,2,3,4,...[]]
.asEnumerable()
.where((x:number) => x >= 2)
.select((x:number) => [x,[x * 2,[x * 3]]])
.concat([1,2,3,4])
.selectMany(x => x[1])
.append(13)
.groupBy(x => x)
.chunk(3)
.reverse()
//...
.toArray() // => [...]
支持的LINQ接口
实现方式
JS并没有暴露生成器类,只能通过生成器函数拿到原型
(function*(){})() // Generator{<suspended>}
通过在生成器的原型上挂载函数来实现扩展
(function*(){})()
.__proto__
.__proto__.asEnumerable = function()
{
return this;
}
而生成器继承了迭代器,Array也实现了迭代器,在他们的内部,都可以通过 for
… of
… 对自己进行遍历
function * asEnumerable() {
for(const item of this)
{
yield item
}
}
那么相同的实现可以挂在不同原型上也能达到同样的效果