【JavaScript】又一神器框架:linq.js

引言 

       前几天针对一个js数组交集的问题请教了下同事,他第一反应就是循环,这也是常规思路,因为我个人更倾向于js些,我便开玩笑,不知道js能不能像linq那样实现这些操作呢?果断百度了一把,果然有现成框架啊,真是高手在民间啊。

      官方的介绍中说支持90多个方法,我觉的起码是C# Linq有的方法它肯定有。

优点

      1、支持jQuery插件的方式。jquery.linq.min.js。

      2、也可以像普通js方法一样使用。linq.min.js。

      3、当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持。

      4、和C# Linq有很相似的地方,这个就会让你上手起来更快,更让我欢喜的是在linq.js的一些方法中,你可以像写Lambda表达式一样去写过滤条件,而且在过滤字符串中支持$符号【下面上图】。

 

Linq.js结构图

 

体验一:查询json对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function  TestQueryObjects() {
             var  jsonArray = [
                 "StuID" : 1,  "StuName" "James" "Age" : 30,  "Country" "USA"  },
                 "StuID" : 2,  "StuName" "Byant" "Age" : 36,  "Country" "USA"  },
                 "StuID" : 3,  "StuName" "Lin" "Age" : 30,  "Country" "Taiwan"  },
                 "StuID" : 4,  "StuName" "Yao" "Age" : 30,  "Country" "Shanghai"  }
             ];
 
             var  querResult = $.Enumerable.From(jsonArray)
                 .Where( function  (x) {  return  x.Age <= 30; })
                 .OrderBy( function  (x) {  return  x.StuID; })
                 .ToArray()
                 .forEach( function  (i) {
                     document.write(i.StuID +  ";"  + i.StuName +  ";"  + i.Age +  ";"  + i.Country +  "<br/>" );
                 });
 
             document.write( "===================================="  "<br/>" );
 
             
             var  queryResult2 = $.Enumerable.From(jsonArray)
                 .Where( "$.Age<=30" //这个操作很牛气
                 .OrderBy( "$.StuID" )
                 .ToArray()
                 .forEach( function  (i) {
                     document.write(i.StuID +  ";"  + i.StuName +  ";"  + i.Age +  ";"  + i.Country +  "<br/>" );
                 });
         }

  上下两个queryResult会得出一样的结果

体验二:Lambda怎么来,Linq.js就怎么来

1
2
3
4
5
6
7
8
9
10
11
12
13
function  TestWithLinq() {              // C# Linq
             //Enumerable.Range(1, 10)
             //.Where(delegate(int i) { return i % 3 == 0; })
             //.Select(delegate(int i) { return i * 10; });
             
             Enumerable.Range(1, 10)
                 .Where( function  (i) {  return  i % 3 == 0; })
                 .Select( function  (i) {  return  i * 10; })
                 .ToArray()
                 .forEach( function  (i) {
                 document.write(i +  ";" );  //30;60;90;
             });
}

 

 体验三:去重

1
2
3
4
5
6
7
8
9
function  TestDistinct() {
             var  arr = [100, 200, 30, 40, 500,200, 40];
             Enumerable.From(arr)
                 .Distinct()
                 .ToArray()
                 .forEach( function (i) {
                     document.write(i +  ";" );  //100;200;30;40;500;
                 });
             }

 

 

体验四:交集、差集、并集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function  TestIntersectExcept() {
             var  arr1 = [1, 412, 53, 25];
             var  arr2 = [53, 25,22,20];
 
             Enumerable.From(arr1).Intersect(arr2).ForEach( function (i) {
                 document.write(i +  ";" );  //53,25
             });
 
             Enumerable.From(arr1).Except(arr2).ForEach( function  (i) {
                 document.write(i +  ";" );  // 1;412
             });
 
             Enumerable.From(arr1).Union(arr2).ForEach( function  (i) {
                 document.write(i +  ";" );  // 1;412;53;25;22;20;
             });
         }

 

 体验五:Alternate、Contains

1
2
3
4
5
6
7
8
function  TestAlternate() {
             Enumerable.Range(1, 5).Alternate( '*' ).ForEach( function  (i) {
                 document.write(i +  ";" );  //;*;2;*;3;*;4;*;
             });
 
             var  r = Enumerable.Range(1, 5).Contains(3);
             document.write(r);  //ture
         }

 

体验六:Min、Max

1
2
3
4
5
6
function  TestMaxMin() {
             var  max = Enumerable.Range(1, 5).Max();  //5
             var  min = Enumerable.Range(1, 5).Min();  //1
             document.write(max+ ";" +min);
 
         }

 

总结

      能用到这些js的地方有些功能在后台也可以实现,但是我个人更喜欢js的方式,所以就用了上面几个方法,另外看看linq.js的源码对一些算法也能加深理。使用情况和爱好根据个人爱好来定,不过当我找到这个框架时着实有些震撼。

      github地址:http://linqjs.codeplex.com/

      官方给出 的API和Demo也能很简单:http://neue.cc/reference.htm

      如果你也是个js爱好者或者觉的对你有帮助,请不吝点赞,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值