近期的工作内容有需要写很多的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/