zoukankan      html  css  js  c++  java
  • 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

    来自:http://www.cnblogs.com/ycbt/archive/2013/01/29/2881245.html

    新版本(无须依赖jQuery):

    Array.prototype.where = function (str) { var rs = []; for (var i in this) { var o = this[i]; if (typeof (this[i]) != 'function') if (eval(str)) rs.push(o); } return rs };

    去空格不到150字符。
  • 相关阅读:
    IIS是如何处理ASP.NET请求的
    c# Socket通讯中关于粘包,半包的处理,加分割符
    windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)
    C#微信公众号/订阅号开发 接口源码
    C#线程池多线程Socket通讯 服务器端和客户端示例
    百度地图JS调用示例
    c# 图片转二进制/字符串 二进制/字符串反转成图片
    电商项目面试总结
    96. Unique Binary Search Trees
    92.Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/lidj/p/3171365.html
Copyright © 2011-2022 走看看