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
有些什么不足或建议,希望大家提出来改进,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?