码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-05-26 19:15:53      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

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

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

bubuko.com,布布扣
  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);
    }
 }    
bubuko.com,布布扣

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

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

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

bubuko.com,布布扣
        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);    
bubuko.com,布布扣

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

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

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

我们来调用试下

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

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

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

bubuko.com,布布扣
                (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)
bubuko.com,布布扣

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

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

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

一些简单的帮助类(2)-- JavaSctipt Array Linq,布布扣,bubuko.com

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

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/ab12/p/3751943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!