zoukankan      html  css  js  c++  java
  • Underscore.js基础入门

    公司产品集成了对Underscore.js,所以需要对这个库有一定的了解。通过查阅资料,发现这个库主是对Array和JSON的处理支持。通过Underscore.js库,可以方便的对Array和JSON数据进行操作。下面是一些我学习中做测试写的示例,po在这里,供将来复习。

    var $ = lib.c.$;
    var _ = lib.Underscore.require();
    
    /*
    这个函数演示了map的使用方法
    map接受JSON和Array
    map函数第一个参数是一个Array/JSON(object)类型的数据,第二个参数是一个处理函数
    返回值是一个数组
    */
    function mapDemo()
    {
        var personInfo = 
        {
            name:"sheldon",
            age:28,
            gender:"male",
            cellNumber:"15527738495"
        };
    
        var result = _.map(personInfo,function(value, key)
        {
            return value;
        });
    
    
        print(result);
        print(result[2]);
        
        print("=================");
        
        var numberArray = [1,3,2,1,2,3];
        result = _.map(numberArray,function(item)
        {
            return item * item;
        });
        
        print(result);
        print(result[2]); 
    }
    
    
    function everyAndSomeDemo()
    {
        var numberArray = [1,3,2,1,2,3];
        var result = _.every(numberArray,function(item)
        {
            return item > 2;
        });
        print("所有的元素都大于2: " + result);
        
        result = _.some(numberArray,function(item)
        {
            return item > 2;
        });
        print("部分元素都大于2: " + result);
        
        
        var boxInfo = {height:true,false,length:true};
        result = _.every(boxInfo,function(val,key)
        {
            return val == true;
        });
        
        print("箱子的所有指标(长/宽/高)都正确: " + result);
    
    
        result = _.some(boxInfo,function(val,key)
        {
            return val == true;
        });
        
        print("箱子的部分指标(长/宽/高)正确: " + result);
    }
    
    
    function maxDemo()
    {
        var numberArray = [1,3,2,1,2,3];
    
        var maxNumber = _.max(numberArray);
        print("max number in array:" + maxNumber);
        
        //NOTE: the key should not be length. otherwise the result is infinity
        var numberObject = {"height":133,"width":146,"length":122};
        maxNumber = _.max(numberObject);
        print("max number in JSON(object):" + maxNumber);
        
        var numberObject1 = {"height":133,"width":146,"length1":122};
        maxNumber = _.max(numberObject1);
        print("max number in JSON(object):" + maxNumber);
    }
    
    
    
    function groupByDemo()
    {
        var scoresInArray = [20, 81, 75, 40, 91, 59, 77, 66, 72, 88, 99];
    
        var result = _.groupBy(scoresInArray,function(item)
        {
            if(item < 60 )
                return "不及格";
            else if(item >= 60 && item < 80)
                return "合格";
            else
                return "优秀";
        });
    
        for(var key in result)
        {
            print(key + ":" + result[key]);
        }
        
        var scoresInObject = 
        {
            "小明":22,
            "小张":67,
            "小红":45,
            "小华":99,
            "小贾":85
        };
        
        //对object进行分组的时候,只对value进行分组
        result = _.groupBy(scoresInObject,function(value)
        {
            if(value < 60 )
                return "不及格";
            else if(value >= 60 && value < 80)
                return "合格";
            else
                return "优秀";
        });
        
        for(var key in result)
        {
            print(key + ":" + result[key]);
        }
        
    }
    
    
    //用洗牌算法随机打乱一个集合:
    function shuffleDemo()
    {
        // 注意每次结果都不一样:
        var result = _.shuffle([1, 2, 3, 4, 5, 6]); // [3, 5, 4, 6, 2, 1]
        print(result);
    }
    
    //随机选择一个或多个元素:
    function sampleDemo()
    {
        // 注意每次结果都不一样:
        // 随机选1个:
        var result = _.sample([1, 2, 3, 4, 5, 6]); // 2
        print(result);
        // 随机选3个:
        result = _.sample([1, 2, 3, 4, 5, 6], 3); // [6, 1, 4]
        print(result);
    } 
    
    
    //keys()可以非常方便地返回一个object自身所有的key,但不包含从原型链继承下来的:
    function keysDemo()
    {
        function Student(name,age)
        {
            this.name = name;
            this.age = age;
        }
        
        var xm = new Student("xiaoming",23); 
        var keysXM = _.keys(xm);// ['name', 'age']
        
        for(var index in keysXM)
        {
            var key = keysXM[index]; 
            print(key + ":" + xm[key]);
        }
    }
    
    //和keys()类似,values()返回object自身但不包含原型链继承的所有值:
    function valuesDemo()
    {
        function Student(name,age)
        {
            this.name = name;
            this.age = age;
        }
        
        var xm = new Student("xiaoming",23); 
        var valuesXM = _.values(xm);// ['小明', 20]
        for(var index in valuesXM)
        {
            print(valuesXM[index]);
        }
    }
    
    
    //invert()把object的每个key-value来个交换,key变成value,value变成key:
    function invertDemo()
    {
        function Scores(math,english,computer)
        {
            this.math = math;
            this.english = english;
            this.computer = computer;
        }
        
        var testResult = new Scores(66,75,94);
        var testResultInverted = _.invert(testResult);
        var keysOfTestResult = _.keys(testResult);
        var keysOfTestResultInverted = _.keys(testResultInverted);
        
        for(var index in keysOfTestResult)
        {
            var key = keysOfTestResult[index];
            print(key + ":" + testResult[key]);
        }
        print("===============");
        
        for(var index in keysOfTestResultInverted)
        {
            var key = keysOfTestResultInverted[index];
            print(key + ":" + testResultInverted[key]);
        }
    }
    
    
    //如果我们要复制一个object对象,就可以用clone()方法,它会把原有对象的所有属性都复制到新的对象中:
    function cloneDemo()
    {
        var source = 
        {
            name: '小明',
            age: 20,
            skills: ['JavaScript', 'CSS', 'HTML']
        };
        
        var copied = _.clone(source);
        print(copied == source);
        print(copied.name == source.name);
        print(copied.age == source.age);
        //注意,clone()是“浅复制”。所谓“浅复制”就是说,两个对象相同的key所引用的value其实是同一对象:
        print(copied.skills == source.skills);
    }
    
    
    
    //isEqual()对两个object进行深度比较,如果内容完全相同,则返回true
    //isEqual()对两个object进行深度比较,如果内容完全相同,则返回true
    function isEqualDemo()
    {
        var o1 = { name: 'Bob', skills: { Java: 90, JavaScript: 99 }};
        var o2 = { name: 'Bob', skills: { JavaScript: 99, Java: 90 }};
        
        print(o1 === o2); // false
        print(_.isEqual(o1, o2)); // true
        
        //isEqual()其实对Array也可以比较
        o1 = ['Bob', { skills: ['Java', 'JavaScript'] }];
        o2 = ['Bob', { skills: ['Java', 'JavaScript'] }];
        
        print(o1 === o2); // false
        print(_.isEqual(o1, o2)); // true
    }
    
    function chainDemo()
    {
        var numberArray = [1,3,2,1,2,3,2,7,7,8,2];
        var result = _.chain(numberArray).filter(function(item)
        {
            return item%2 == 0;
        }).map(function (item)
        {
            return item*2;
        }).value();
        
        print(result);
    }

    欢迎加入QQ群参与讨论. 422683877

  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5838820.html
Copyright © 2011-2022 走看看