jQuery擴展半Lambda表達式 類似Linq的Where


首先要載入jquery

 

//半Lambda表達式的Javascript,返回List

Array.prototype.where = function (s) { return eval("(jQuery.grep(this, function (o, i){return " + s + ";}))"); }

 

除去空格僅有98個字符(這擴展夠精簡的了,也可以拆出來用jQuery.grep但如果頁面上很多地方用到,代碼就多了)

 

有人說依賴jQuery不好用(現在多少系統寫JS必備jquery,這個不說)

 

有人說eval效率差(請你自己試試,能不能在項目中使用,反正這個where我在項目中用很多,並不見得卡

 

使用方法:

Demo 1://基礎

var arr = [3,5,7,8];

var list1 = arr.where("o > 5") ; //得到[7,8]

var list2 = arr.where("i  < 3"); // 得到[3,5,7]

 

Demo 2:  //進階

var arr = [{id:1,name:"Jay"},{id:2,name:"Joy"},{id:3,name:"Bob"}];

var list1 = arr.where("o.name == 'Joy'"); //得到 [{id:2,name:"Joy"}] ;

var list2 = arr.where("o.name.indexOf('o')!=-1");//得到name含有'o'字母的 [{id:2,name:"Joy"},{id:3,name:"Bob"}];

 

Demo 3: //高級

var arr =[{name:"Jay",age:29,c:[{name:"A"},{name:"B"}]},{name:"Jay",age:26,c:[]},{name:"Jay",age:24,c:[{name:"C"}]}];

var list1 = arr.where("o.age > 25 && !o.c && o.c.length > 0");

//年齡大於25且至少有一個孩子 [{name:"Jay",age:29,children:[{name:"A"},{name:"B"}]}]

 

提醒:得到的list是原來的對象,不是副本,通過 list1[0].name = "XX" 可以更改 arr[0]的name

 

缺點:

  where被擴展到Array中,for(var i in arr) 會遍歷到 where

  因此,以后想用for要做好判斷 或者 采用 $(arr).each(function(i,o){        })取代(建議) ,也可以不擴展到Array,自己寫全局Function

 

有些什么不足或建議,希望大家提出來改進,謝謝!


免責聲明!

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



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