linq.js


今天在項目里發現一個類似於linq的寫法,上網百度了一下發現是linq.js,感覺還挺有用的,於是把這個文章轉載過來與大家分享,也讓自己學習。

內容:

    在做后台開發的時候,總是會碰到將拿到手的數據進行條件校驗,而這些數據又不僅僅是單純的一個,有時候會是一串大數據,需要自己在后台處理進而展示到前台頁面上,醬紫自己第一反應就是使用for循環來遍歷,並把所需的數據放在相應的地方。可是導致的后果卻是再審視后台的代碼時,那么多那么多重復的代碼,我可以把對同一個dom節點的遍歷寫兩遍,於是我就被同事大神給嘲笑了,不過幸好,他后來教了我一個“神武器”——linq.js,一個專門解決我遇到的問題的神器。

    linq,全稱為Language Integrated Query,通過構建快速查詢語句,可快速從數據庫或集合中篩選數據集、以查詢數據庫相同的方式操作內存數據。最主要的使用它是來對集合進行各種操作,比如:去重,去空,省略了以往拿for遍歷判斷取值的麻煩性。話不多說,奉上小小經驗:

   linq.js相當於是一個前端框架吧,因此使用起來也只是在頁面上引入它的js文件而已,或者在thinkjs項目中使用的時候,npm一下linq.js包就好了。這里使用的是express項目:

   

var express = require('express');
var linq = require('linq');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  var myList = [
    { Name: "Jim", Age: 20,type:1 },
    { Name: "Kate", Age: 20 ,type:2},
    { Name: "Lilei", Age: 18,type:1 },
    { Name: "John", Age: 14,type:2 },
    { Name: "LinTao", Age: 25,type:1 }
  ];
  // var arrRes = linq.from(myList).where("x=>x.Name=='John'").toArray();//條件查詢    [{"Name":"John","Age":14,"type":2}]
  //var arrRes = linq.from(myList).select("x=>x.Age*10").toArray();//條件選擇          [200,200,180,140,250]
  //var arrRes = linq.from(myList).orderBy("x=>x.Age").toArray();//排序[{"Name":"John","Age":14,"type":2},{"Name":"Lilei","Age":18,"type":1},{"Name":"Jim","Age":20,"type":1},{"Name":"Kate","Age":20,"type":2},{"Name":"LinTao","Age":25,"type":1}]
  var arrRes = linq.from(myList).distinct("x=>x.Age").where("y=>y.type=='2'").toArray();//去重  言外之意是:去重之后再搜索   [{"Name":"John","Age":14,"type":2}]
  //var arrRes = linq.from(myList).forEach(function (value, index) {//循環
  //    console.log('value:'+value.Name+' =======index : '+index)
  //});
  //var arrRes = linq.from(myList).firstOrDefault('x=>x.Age>18');//取唯一對象:First、FirstOrDefault、Last、LastOrDefault、Single、SingleOrDefault   {"Name":"Jim","Age":20,"type":1}
  //var arrRes=linq.range(1,10).skip(5).toArray();//結果[6,7,8,9,10]
  //var arrRes=linq.range(1,10).take(5).toArray();//結果[1,2,3,4,5]

  // var array1 = [1,412,5,3,5,412,7];
  // var array2 = [20,12,5,5,7,310];
  //var arrRes=linq.from(array1).except(array2).toArray();//結果3,412,1 差集
  //var arrRes=linq.from(array1).intersect(array2).toArray();//結果5,7  交集
  //var arrRes=linq.from(array1).union(array2).toArray();//結果是兩個結果集里面所有值,並自動去重

  //var arrRes=linq.range(1,10).where('x=>x%2==0').toArray();
  // res.render('index', { title: JSON.stringify(arrRes) });

  // var arr1=["2","",""];
  // var arrRes=linq.from(arr1).where("x=>x==''").toArray();
  console.log("=============="+JSON.stringify(arrRes));

});

module.exports = router;

 

我自己覺得linq對於那種需要兩次遍歷的操作還是蠻有用的,可以減少很多代碼和時間。

 


免責聲明!

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



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