Package Exports
- linq-js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (linq-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
LinqJs
use linq and lambda in javascript
在javascript中使用linq与lambda
在1.0.0中使用了字符串的lambda表达式,过于繁琐,并且不支持延迟操作
从2.1.0开始整体代码重新编写,使用全新的ES6的特性,性能更好,同时对数据的操作是延时操作,占用更少
Change list 更新日志
2017-03-09 v2.0.5
新增 IEnumerator 接口 与 实现
新增 Enumerable.IComparable 与 Enumerable.IEquatable 接口, 及调整默认的 defaultComparer 与 defaultEqualityComparer 实现
新增 Enumerable.arrayComparer 与 Enumerable.predicateComparer
2017-03-06 v2.0.4
修复forEach的bug
2017-03-02
修改了join方法参数顺序,以及参数默认值
修改了groupJoin方法参数的顺序,以及参数默认值
为selectMany方法的collectionSelector:Function参数方法增加了index参数
为zip方法的resultSelector:Function参数方法增加了index参数
为aggreagte方法的func:Function参数方法增加了index参数
补充了文档
2017-03-01
由import方法修改为require方式引用
增加了对node最低版本号的限制
Usage 用法
Usage for English is Coming soon...
Start 开始使用
1. 引入
使用nodejs
$ npm install --save linq-js
const Enumerable = require('linq-js');
- 说明:本module依赖于ES6,建议项目在中使用ES6,以下案例中将均使用ES6写法
2. 配置
Enumerable.Config.extends.array = true; //开启针对Array的扩展
Enumerable.Config.extends.string = true; //开启针对String的扩展
Enumerable.Config.extends.object = true; //开启针对Object的扩展
IEnumerable对象
1. 获取IEnumerable对象
interface IEnumerable { };
function asEnumerable():IEnumerable; //任何对象都有asEnumerable方法用来获取IEnumerable对象
e.g. 案例
'abc'.asEnumerable(); [1,2,3].asEnumerable(); {a:1,b:2}.asEnumerable();
2. toArray()
:see :参考
function toArray():Array;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.toArray(); //[1, 2, 3]
3. select(selector)
:see :参考
function select(
selector:Function = defaultSelector
):IEnumerable,
selector(element:any, index:number):any;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.select((element, index) => `${element}|${index}`); //'1|0', '2|1', '3|2'
4. where(predicate)
:see :参考
function where(
predicate:Function = defaultPredicate
):IEnumerable,
predicate(element:any, index:number):boolean;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.where(v => v >= 2); //2, 3
5. any(predicate)
:see :参考
function any(
predicate:Function
):boolean,
predicate(element:any, index:number):boolean;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.any(v => v == 2); //truee
6. all(predicate)
:see :参考
function all(
predicate:Function
):boolean,
predicate(element:any, index:number):boolean;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.all(v => v == 2); //false
7. sum(selector)
:see :参考
function sum(
selector:Function = defaultSelector
):number,
selector(element:any, index:number):number;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.sum(); //6
8. average(selector)
:see :参考
function average(
selector:Function = defaultSelector
):number,
selector(element:any, index:number):number;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.average(); //2
9. aggregate(seed, func, resultSelector)
:see :参考
function aggregate(
seed:any,
func:Function,
resultSelector:Function = defaultSelector
):any,
func(seed:any, element:any, index:number):any,
resultSelector(seed:any):any;
e.g. 案例
let e = [1,2,3,4].asEnumerable(); e.aggregate(1, (s, v) => s * v); //24
10. max(selector, comparer)
:see :参考
function max(
selector:Function = defaultSelector,
comparer:Function = defaultComparer
):any,
selector(element:any, index:number):number,
comparer(element:any, other:any):number;
e.g. 案例
let e = [1,2,3,4].asEnumerable(); e.max(); //4
11. min(selector, comparer)
:see :参考
function min(
selector:Function = defaultSelector,
comparer:Function = defaultComparer
):any,
selector(element:any, index:number):number,
comparer(element:any, other:any):number;
e.g. 案例
let e = [1,2,3,4].asEnumerable(); e.min(); //1
12. concat(other)
function concat(
other:IEnumerable
):IEnumerable
e.g. 案例
let e1 = [1,'a'].asEnumerable(); let e2 = [2,'b'].asEnumerable(); e1.concat(e2); //1, 'a', 2, 'b'
13. contains(value, comparer)
function contains(
value:any,
comparer:Function = defaultEqualityComparer
):boolean,
comparer(element:any, other:any):boolean;
14. count(predicate)
function count(
predicate:Function = defaultPredicate
):number,
predicate(element:any, index:number):boolean;
e.g. 案例
let e = [1,2,3,4].asEnumerable(); e.count(v => v >= 2); //3
15. defaultIfEmpty(defaultValue)
:see :参考
function defaultIfEmpty(
defaultValue:any
):IEnumerable
16. distinct(comparer)
function distinct(
comparer:Function = defaultEqualityComparer
):IEnumerable,
comparer(element:any, other:any):boolean;
17. except(other, comparer)
function except(
other:IEnumerable,
comparer:Function = defaultEqualityComparer
):IEnumerable,
comparer(element:any, other:any):boolean;
18. union(other, comparer)
function union(
other:IEnumerable,
comparer:Function = defaultEqualityComparer
):IEnumerable,
comparer(element:any, other:any):boolean;
19. intersect(other, comparer)
function intersect(
other:IEnumerable,
comparer:Function = defaultEqualityComparer
):IEnumerable,
comparer(element:any, other:any):boolean;
20. elementAt(index)
function elementAt(
index:number
):any;
21. elementAtOrDefault(index, defaultValue)
function elementAtOrDefault(
index:number,
defaultValue:any
):any;
22. firstAt(predicate)
function firstAt(
predicate:Function = defaultPredicate
):any,
predicate(element:any, index:number):boolean;
23. firstAtOrDefault(defaultValue, predicate)
function firstAtOrDefault(
defaultValue:any,
predicate:Function = defaultPredicate
):any,
predicate(element:any, index:number):boolean;
24. lastAt(predicate)
function lastAt(
predicate:Function = defaultPredicate
):any,
predicate(element:any, index:number):boolean;
25. lastAtOrDefault(defaultValue, predicate)
function lastAtOrDefault(
defaultValue:any,
predicate:Function = defaultPredicate
):any,
predicate(element:any, index:number):boolean;
26. singleAt(predicate)
function singleAt(
predicate:Function = defaultPredicate
):any,
predicate(element:any, index:number):boolean;
27. singleAtOrDefault(defaultValue, predicate)
function singleAtOrDefault(
defaultValue:any,
predicate:Function = defaultPredicate
):any,
predicate(element:any, index:number):boolean;
28. join(split)
function join(
split:string
):string;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.join('|'); //'1|2|3'
29. ofType(type)
function ofType(
type:type
):IEnumerable;
e.g. 案例
let e = ['a',1,true,'b',3.2,()=>{}].asEnumerable(); e.ofType(String); //'a', 'b' e.ofType(Number); //1, 3.2 e.ofType(Boolean); //true e.ofType(Function): //()=>{}
30. reverse()
function reverse():IEnumerable;
e.g. 案例
let e = [1,2,3].asEnumerable(); e.reverse(); //3, 2, 1
31. sequenceEqual(other, comparer)
function sequenceEqual(
other:IEnumerable,
comparer:Function = defaultEqualityComparer
):boolean,
comparer(element:any, other:any):boolean;
32. skip(count)
function skip(
count:number
):IEnumerable;
e.g. 案例
let e = [1,2,3,4].asEnumerable(); e.skip(2); //3, 4
33. skipWhile(predicate)
function skipWhile(
predicate:Function = defaultPredicate
):IEnumerable,
predicate(element:any, index:number):boolean;
33. take(count)
function take(
count:number
):IEnumerable;
e.g. 案例
let e = [1,2,3,4].asEnumerable(); e.take(2); //1, 2
34. takeWhile(predicate)
function takeWhile(
predicate:Function = defaultPredicate
):IEnumerable,
predicate(element:any, index:number):boolean;
35. zip(other, resultSelector)
function zip(
other:IEnumerable
resultSelector:Function
):IEnumerable,
resultSelector(element:any, other:any, index:number):any;
36. toDictionary(keySelector, elementSelector, comparer)
function toDictionary(
keySelector:Function = defaultSelector,
valueSelector:Function = defaultSelector,
comparer:Function = defaultEqualityComparer
):Dictionary,
keySelector(element:any, index:number):any,
valueSelector(element:any, index:number):any,
comparer(element:any, other:any):boolean;
37. toLookup(keySelector, elementSelector, comparer)
function toLookup(
keySelector:Function = defaultSelector,
valueSelector:Function = defaultSelector,
comparer:Function = defaultEqualityComparer
):Lookup,
keySelector(element:any, index:number):any,
valueSelector(element:any, index:number):any,
comparer(element:any, other:any):boolean;
38. toObject(keySelector, elementSelector, comparer)
function toObject(
keySelector:Function = defaultKeySelector,
valueSelector:Function = defaultValueSelector,
comparer:Function = defaultEqualityComparer
):any,
keySelector(element:any, index:number):string,
valueSelector(element:any, index:number):any,
comparer(element:string, other:string):boolean;
39. orderBy(keySelector, comparer)
function orderBy(
keySelector:Function = defaultSelector,
comparer:Function = defaultComparer
):IOrderedEnumerable,
keySelector(element:any, index:number):any,
comparer(element:any, other:any):number;
40. orderByDescending(keySelector, comparer)
function orderByDescending(
keySelector:Function = defaultSelector,
comparer:Function = defaultComparer
):IOrderedEnumerable,
keySelector(element:any, index:number):any,
comparer(element:any, other:any):number;
41. join(inner, resultSelector, outerKeySelector, innerKeySelector, comparer)
function join(
inner:IEnumerable,
resultSelector:Function,
outerKeySelector:Function = defaultSelector,
innerKeySelector:Function = defaultSelector,
comparer:Function = defaultEqualityComparer
):IEnumerable
resultSelector(element:any, other:any):any,
outerKeySelector(element:any, index:number):any,
innerKeySelector(element:any, index:number):any,
comparer(element:any, other:any):boolean;
42. groupBy(keySelector, elementSelector, resultSelector, comparer)
function groupBy(
keySelector:Function = defaultSelector,
elementSelector:Function = defaultSelector,
resultSelector:Function = defaultGroupResultSelector,
comparer:Function = defaultEqualityComparer
):IEnumerable,
keySelector(element:any, index:number):any,
elementSelector(element:any, index:number):any,
resultSelector(key:any, grouping:IGrouping):any,
comparer(element:any, other:any):boolean;
43. selectMany(collectionSelector, resultSelector)
function selectMany(
collectionSelector:Function = defaultSelector,
resultSelector:Function = defaultSelector
):IEnumerable,
collectionSelector(element:any, index:number):any,
resultSelector(element:any):any;
44. groupJoin(inner, resultSelector, outerKeySelector, innerKeySelector, comparer)
function groupJoin(
inner:IEnumerable,
resultSelector:Function,
outerKeySelector:Function = defaultSelector,
innerKeySelector:Function = defaultSelector,
comparer:Function = defaultEqualityComparer
):IEnumerable
resultSelector(element:any, grouping:IGrouping):any,
outerKeySelector(element:any, index:number):any,
innerKeySelector(element:any, index:number):any,
comparer(element:any, other:any):boolean;
45. forEach(action)
function forEach(
action:Function = defaultAction
),
action(element:any, index:number):void;
46. ```getEnumerator()`
function getEnumerator():IEnumerator;
IOrderedEnumerable对象
1. thenBy(keySelector, comparer)
function thenBy(
keySelector:Function = defaultSelector,
comparer:Function = defaultComparer
):IOrderedEnumerable,
keySelector(element:any, index:number):any,
comparer(element:any, other:any):number;
2. thenByDescending(keySelector, comparer)
function thenByDescending(
keySelector:Function = defaultSelector,
comparer:Function = defaultComparer
):IOrderedEnumerable,
keySelector(element:any, index:number):any,
comparer(element:any, other:any):number;
IMapEnumerable对象
interface IMapEnumerable extends IEnumerable { };
1. forEach(action)
function forEach(
action:Function = defaultAction
),
action(element:any, key:any):void;
Dictionary对象
class Dictionary extends IMapEnumerable { };
Lookup对象
class Lookup extends IMapEnumerable { };
IGrouping对象
class IGrouping extends IEnumerable { };
1. key
const key:any;
IEnumerator对象
interface IEnumerator { };
1. current
2. moveNext()
function moveNext():boolean;
3. reset()
function reset():void;
Enumerable类
1. repeat(element, count)
:see :参考
function Enumerable.repeat(
element:any,
count:number
):IEnumerable;
e.g. 案例
Enumerable.repeat('a', 2); //'a', 'a'
2. range(start, count)
:see :参考
function Enumerable.range(
start:number,
count:number
):IEnumerable;
e.g. 案例
Enumerable.range(2, 3); //2, 3, 4
3. arrayComparer(array, last)
function Enumerable.arrayComparer(
array:array, // 表示值的顺序的数组
last:boolean = false // 表示配备不到的元素将作为正序的最末端还是最前端,默认最前端
):Function; // comparer
e.g. 案例
let e = [ {"status": "start", "value": "A"}, {"status": "end", "value": "B"}, {"status": "start", "value": "C"}, {"status": "progress", "value": "D"}, {"status": "start", "value": "E"}, {"status": "init", "value": "F"} ]; e.asEnumerable().orderBy(v => v.status, Enumerable.arrayComparer(["start", "progress", "end"])).select(v => v.value); //'F', 'A', 'C', 'E', 'D', 'B' e.asEnumerable().orderBy(v => v.status, Enumerable.arrayComparer(["start", "progress", "end"], true)).select(v => v.value); //'A', 'C', 'E', 'D', 'B', 'F'
4. predicateComparer(array, last)
function Enumerable.predicateComparer(
array:array<Function>, // 包含一组校验方法的数组
last:boolean = false // 表示配备不到的元素将作为正序的最末端还是最前端,默认最前端
):Function; // comparer
e.g. 案例
let e = [ {"status": "start", "value": "A"}, {"status": "end", "value": "B"}, {"status": "start", "value": "C"}, {"status": "progress", "value": "D"}, {"status": "start", "value": "E"}, {"status": "init", "value": "F"} ]; e.asEnumerable().orderBy(v => v.status, Enumerable.predicateComparer([s => s == "start", s => s == "progress", s => s == "end"])).select(v => v.value); //'F', 'A', 'C', 'E', 'D', 'B' e.asEnumerable().orderBy(v => v.status, Enumerable.predicateComparer([s => s == "start", s => s == "progress", s => s == "end"], true)).select(v => v.value); //'A', 'C', 'E', 'D', 'B', 'F'
More docs and examples, to be continue... 更多接口文档的案例,未完待补充...
:see msdn(IEnumerable
:see msdn(Enumerable)
:参考 MSDN(Enumerable)