在JS中使用Linq

近期的工作内容有需要写很多的JS,写了太多的for、$.each觉得太不方便。想到C#中提供的Linq扩展库开始思考是否也能在JS中使用Linq。

在网上搜索了下发现有不少博友已经写过类似的JS插件,并且最新的浏览器已经支持在JS中使用lambda表达式。为了了解Linq中的各方法的实现方式,以及工程中对其它公共方法的需要决定自己写一个JS插件来实现类似Linq的功能。

废话不多说,上代码:

那么如何使用?

构造如下数组:
var
testArray = [ { name: "aaaa", value: 1 }, { name: "bbbb", value: 2 }, { name: "cccc", value: 3 } ];
可通过$$符号来访问扩展插件。
$$.ae:创建一个新的数组扩展,如:$$.ae(testArray)
$$.sae:使用全局数组扩展,如:$$.sae(testArray)
1、是否存在某个元素
$$.sae(testArray).hasItem(x => x.name == "aaaa")
2、是否所有元素满足某个条件
$$.sae(testArray).all(x => x.value > 0)
3、是否存在满足鞭个条件的元素
$$.sae(testArray).any(x => x.value > 2)
4、取得所有符合条件的元素
$$.sae(testArray).findAll(x => x.value > 1)
5、取得元素中某个字段的列表
$$.sae(testArray).select (x => x.value).toArray()
6、移除满足条件的元素
$$.sae(testArray).remove(x => x.value > 2).toArray()
7、是否存在重复元素
$$.sae(testArray).hasRepeatItem()
$$.sae(testArray).hasRepeatItemBy(x => x.value)
8、去重
$$.sae(testArray).distinctBy(x => x.value).toArray()
9、取得第一个元素
$$.sae(testArray).firstOrDetault(x => x.value == 3)
10、排序
$$.sae(testArray).orderBy(x => x.name).thenBy(x => x.value).toArray()
11、分组
$$.sae(testArray).groupBy(x => x.name)

由于并不是所有的浏览器都支持lambda表达式,所以在使用时为了保证兼容性最好用匿名函数替换lambda表达式,如:
$$.sae(testArray).all(function (x) { return x.value > 0; }); 

更多使用手册参考:http://jsl.solomon-yu.cn/JSE/

posted on 2017-10-09 17:47  众从人  阅读(1539)  评论(0编辑  收藏  举报

导航