• 一些简单的帮助类(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技术交流

  • 相关阅读:
    关于自适应屏幕方向和大小的一些经验
    在线升级Android应用程序完善版
    H263&H264&MPEG4
    PyCharm2019 激活
    VMware Workstation下载安装破解秘钥
    linux/kali安装及更新源以及输入法等配置
    python推倒式(列表、字典、集合)
    协程
    Flask中获取参数(路径,查询,请求体,请求头)
    Flask中获取参数(路径,查询,请求体,请求头)
  • 原文地址:https://www.cnblogs.com/ab12/p/3751943.html
Copyright © 2020-2023  润新知