nodeJs中linq.js學習


一.在nodeJs 中package.json文件中添加linq模塊

如:    "linq" : "3.0.5"  

終端中執行npm install  linq模塊會自動下載到node_modules中

sample/tutorial.js 是linq.js的demo  可以參考

二.使用

 在javascript中使用linq與lambda
 
  • 直接對Array和String進行擴展,可直接使用
  • 同時擴展了Number、Date、Console的部分方法,方便使用

var Enumerable = require('linq');

var a = Enumerable.from(['Javascript', 'Java', 'C#', 'php', 'HTML5']).orderBy().toArray();

var c = Enumerable.from(['Javascript', 'Java', 'C#', 'php', 'HTML5']).where("e=>e.startsWith('J')").toArray();

1.根據lambda表達式創建匿名函數

    如  var func = Enumerable.Utils.createLambda('x=>x*2');

        func(5)  //10

2.repeat(count) 由count個該元素組成的新數組

  var d2 = Enumerable.repeat(['a','b'],3).toArray();  

3.條件查詢:Where

 
var myList = [
            { Name: "Jim", Age: 20 },
            { Name: "Kate", Age: 21 },
            { Name: "Lilei", Age: 18 },
            { Name: "John", Age: 14 },
            { Name: "LinTao", Age: 25 }
    ];
    var arrRes = Enumerable.From(myList).Where("x=>x.Name=='Jim'").ToArray();
 

arrRes的結果為 [{"Name":"Jim","Age":20}]

我們來看看這種寫Lamada表達式的原型:

var arrRes = Enumerable.From(myList).Where(function (i) { return i.Name=='Jim'; });

參數i是對應的集合里面的實體模型,返回類型為bool類型。有沒有和C#里面的擴展函數Where的定義很像:public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);參數Func<TSource, bool> predicate為匿名委托,需要傳入實體模型TSource,然后返回值為bool類型。其實感覺linq to js的使用就是參照c#里面的定義來的。

 

4.條件選擇:Select

 
var myList = [
            { Name: "Jim", Age: 20 },
            { Name: "Kate", Age: 21 },
            { Name: "Lilei", Age: 18 },
            { Name: "John", Age: 14 },
            { Name: "LinTao", Age: 25 }
    ];
    var arrRes = Enumerable.From(myList).Select("x=>x.Age*10").ToArray();
 

arrRes得到結果 [200,210,180,140,250]

 

5.排序、去重:OrderBy、Distinct

 
var myList = [
            { Name: "Jim", Age: 20 },
            { Name: "Kate", Age: 21 },
            { Name: "Lilei", Age: 18 },
            { Name: "John", Age: 14 },
            { Name: "LinTao", Age: 25 }
    ];
    var arrRes = Enumerable.From(myList).OrderBy("x=>x.Age").ToArray();//降序OrderByDescending()
 

得到的結果會按照Age排序。

 
var myList = [
            { Name: "Jim", Age: 20 },
            { Name: "Kate", Age: 20 },
            { Name: "Lilei", Age: 20 },
            { Name: "John", Age: 14 },
            { Name: "LinTao", Age: 25 }
    ];
    var arrRes = Enumerable.From(myList).Distinct("x=>x.Age").ToArray();
 

得到的結果集合的數量為3個:[ { Name: "Jim", Age: 20 }, { Name: "John", Age: 14 }, { Name: "LinTao", Age: 25 }]。

 

6.遍歷:ForEach

 
var myList = [
            { Name: "Jim", Age: 20 },
            { Name: "Kate", Age: 20 },
            { Name: "Lilei", Age: 20 },
            { Name: "John", Age: 14 },
            { Name: "LinTao", Age: 25 }
    ];
    Enumerable.From(myList).ForEach(function(value, index){
         document.write("值="+value+",索引="+index);   
 });
 

很顯然兩個參數:一個是值,另一個是當前索引

 

7.取唯一對象:First、FirstOrDefault、Last、LastOrDefault、Single、SingleOrDefault

 
var myList = [
            { Name: "Jim", Age: 20 },
            { Name: "Kate", Age: 20 },
            { Name: "Lilei", Age: 20 },
            { Name: "John", Age: 14 },
            { Name: "LinTao", Age: 25 }
    ];

    var arrRes = Enumerable.From(myList).FirstOrDefault("x=>x.Age>18");
 

其他幾個用法和這個類似。這個沒什么好說的。

 

8 .Skip、Take

Enumerable.Range(1,10).Skip(5)//結果[6,7,8,9,10]
Enumerable.Range(1,10).Take(5)//結果[1,2,3,4,5]

 

9.取交集、取差集、合並

var array1 = [1,412,5,3,5,412,7];
var array2 = [20,12,5,5,7,310];
Enumerable.From(array1).Except(array2)
//結果3,412,1
var array1 = [1,412,5,3,5,412,7];
var array2 = [20,12,5,5,7,310];
Enumerable.From(array1).Intersect(array2)
//結果5,7
var array1 = [1,412,5,3,5,412,7];
var array2 = [20,12,5,5,7,310];
Enumerable.From(array1).Union(array2)
//結果是兩個結果集里面所有值,並自動去重

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM