• 一些简单的帮助类(2)-- JavaSctipt Array Linq


    在日程工作中经常会遇到这样的问题 一个JS数组 我们要找出其中 一些符合要求的类容

    又或者对数组里的类容求和求平均数之类的一般的做法是循环里面的类容做判断添加到一个新的集合里

      var array = [];
      array.push(1);
      array.push(2);
      array.push(3);
      array.push(4);
      array.push(5);
      array.push(6);
    
      var whereArray = [];
      for(var model in array)
      {
        if(model<3) 
        {
            whereArray.push(model);
        }
     }    

    如果需要做查询的代码多了我们就不得不写非常多的循环

    回想下C#里的List集合和Array也差不多 但是System.Linq.Enumerable 扩展类 却给了他非常多的Linq 扩展方法

    使们我们能像如下代码这样查询List

            List<int> list = new List<int>();
            a.Add(1);
            a.Add(2);
            a.Add(3);
            a.Add(4);
            a.Add(5);
            a.Add(6);
             List<int> copyList = list.Where(model => model < 3);    

    拿JavaSctipt 能不能做出一个跟System.Linq.Enumerable 差不多一样的扩展类来了答案是能的我们来定义一段如下的JavaScript脚本

                 Array.prototype.Where = function (func) {
                        var copy = [];
                        for (var model in this) {
                            try {
                                if (func(model)) {
                                    copy.push(model);
                                }
                            }
                            catch (ex) { }
                        }
                    }    

    把它放在页面顶部我们会惊喜的发现 Array 多了一个Where方法 Javascript 每个类的方法都会在prototype中向他添加一个方法也就是向内中添加了一个方法

    我们来调用试下

                   var array = [1,2,3,4,5,6];
                    var copyArray = array.Where(function (model) {return model < 1;})    

    我们会发现这段代码得到了和第一段代码相同的效果但代码却要减少不少

    这样我们就可以吧 其他System.Linq.Enumerable里的常用方法挨个定义出来

                    (function () {
                        /*
                        筛选符合要求的元素
                        func: (e)=>{return bool}
                        return Array
                        */
                        Array.prototype.Where = function (func) {
                            var copy = [];
                            for (var model in this) {
                                try {
                                    if (func(model)) {
                                        copy.push(model);
                                    }
                                }
                                catch (ex) { }
                            }
                        }
                        /*
                        求和
                        func: (e)=>{return Number}
                        return Number
                        */
                        Array.prototype.Sum = function (func) {
                            
                            var int = 0;
                            for (var model in this) {
                                try {
                                    var NaN = func(model);
                                    if (isNaN(NaN)) {
                                        a += NaN * 1;
                                    }
                                }
                                catch (ex) { }
                            }
                            return int;
                        }
                        /*
                        获取集合里第一个符合要求的元素
                        func: (e)=>{return bool}
                        return e or NULL
                        */
                        Array.prototype.Find = function (func) {
                            for (var model in this) {
                                try {
                                    if (func(model)) {
                                        return model;
                                    }
                                }
                                catch (ex) { }
                            }
                            return null
                        }
                    })(Array)

    定义好后每次 使用就直接把存放这段JS的文件拖到页面上 每次就都能使用这些扩展方法了

    还有一点就是JavaSctipt 里的方法注释是这样的/**/ 而不是//

    区别就是在VS IDE里能有 提示

    技术交流群NET技术交流

  • 相关阅读:
    JAVA 问题
    WebStrom配置多个项目的Dweployment时,设置默认的启动配置
    C#中有关数组和string引用类型或值类型的判断
    Delegate(代理)异常:该委托必须有一个目标
    RMAN BACKUP
    Oracle ORA-01033: 错误解决办法
    微信公众号开发 接口配置信息 配置失败
    使用JAVA开发微信公众平台(一)——环境搭建与开发接入
    微信开发准备(四)--nat123内网地址公网映射实现
    nat123安装启动教程帮助
  • 原文地址:https://www.cnblogs.com/ab12/p/3751943.html
Copyright © 2020-2023  润新知