【LINQ】侵略性增强JS数组

linqes


地址

Github : linqes
npm : 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接口

README.md

实现方式

JS并没有暴露生成器类,只能通过生成器函数拿到原型

(function*(){})()   // Generator{<suspended>}

通过在生成器的原型上挂载函数来实现扩展

(function*(){})()
	.__proto__
	.__proto__.asEnumerable = function()
{
	return this;
}

而生成器继承了迭代器,Array也实现了迭代器,在他们的内部,都可以通过 forof … 对自己进行遍历

function * asEnumerable() {
	for(const item of this)
	{
		yield item
	}
}

那么相同的实现可以挂在不同原型上也能达到同样的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值