• Lodash中常用函数,不建议经常使用,容易让人变懒忘了原生函数


    1、N次循环
    <script type="text/javascript">
        console.log('------- javascript -------');
        //js原生的循环方法
        for(var i = 0; i < 5; i++){
            console.log(i);
        }
        console.log('------- lodash -------');
        //ladash的times方法
        _.times(5,function(a){
            console.log(a);
        });
    </script>

    for语句是执行循环的不二选择,但在上面代码的使用场景下,_.times()的解决方式更加简洁和易于理解。

    2、深层查找属性值
    <script type="text/javascript">
        var ownerArr = [{
            "owner": "Colin",
            "pets": [{"name": "dog1"}, {"name": "dog2"}]
        }, {
            "owner": "John",
            "pets": [{"name": "dog3"}, {"name": "dog4"}]
        }];
        var jsMap = ownerArr.map(function (owner) {
            return owner.pets[0].name;
        });
        console.log('------- jsMap -------');
        console.log(jsMap);
    
        var lodashMap = _.map(ownerArr, 'pets[0].name');
        console.log('------- lodashMap -------');
        console.log(lodashMap);
    </script>

      

      Lodash中的_.map方法和JavaScript中原生的数组方法非常的像,但它还是有非常有用的升级。 你可以通过一个字符串而不是回调函数来浏览深度嵌套的对象属性。

    3、深克隆对象
    <script type="text/javascript">
        var objA = {
            "name": "戈德斯文"
        };
        var objB = _.cloneDeep(objA);
        console.log(objA);
        console.log(objB);
        console.log(objA === objB);
    </script> 
    深度克隆JavaScript对象是困难的,并且也没有什么简单的解决方案。你可以使用原生的解决方案:JSON.parse(JSON.stringify(objectToClone)) 进行深度克隆。但是,这种方案仅在对象内部没有方法的时候才可行

    4、在指定范围内获取一个随机值
    <script type="text/javascript">
        function getRandomNumber(min, max){
            return Math.floor(Math.random() * (max - min)) + min;
        }
        console.log(getRandomNumber(15, 20));
    
        console.log(_.random(15, 20));
    
    </script>

    Lodash中的 _.random 方法要比上面的原生方法更强大与灵活。你可以只传入一个参数作为最大值, 你也可以指定返回的结果为浮点数_.random(15,20,true)

    5、扩展对象
    <script type="text/javascript">
        Object.prototype.extend = function(obj) {
            for (var i in obj) {
                if (obj.hasOwnProperty(i)) {    //判断被扩展的对象有没有某个属性,
                    this[i] = obj[i];
                }
            }
        };
    
        var objA = {"name": "戈德斯文", "car": "宝马"};
        var objB = {"name": "柴硕", "loveEat": true};
    
        objA.extend(objB);
        console.log(objA); 
    
        console.log(_.assign(objA, objB));
    </script>

      _.assign 方法也可以接收多个参数对象进行扩展,都是往后面的对象上合并

    6、从列表中随机的选择列表项
    <script type="text/javascript">
        var smartTeam = ["戈德斯文", "杨海月", "柴硕", "师贝贝"];
    
        function randomSmarter(smartTeam){
            var index = Math.floor(Math.random() * smartTeam.length);
            return smartTeam[index];
        }
    
        console.log(randomSmarter(smartTeam));
    
        // Lodash
        console.log(_.sample(smartTeam));
        console.log(_.sampleSize(smartTeam,2));
    </script>

    此外,你也可以指定随机返回元素的个数_.sampleSize(smartTeam,n),n为需要返回的元素个数

    7、判断对象中是否含有某元素
    <script type="text/javascript">
        var smartPerson = {
                'name': '戈德斯文',
                'gender': 'male'
            },
            smartTeam = ["戈德斯文", "杨海月", "柴硕", "师贝贝"];
    
    
        console.log(_.includes(smartPerson, '戈德斯文'));
        console.log(_.includes(smartTeam, '杨海月'));
        console.log(_.includes(smartTeam, '杨海月',2));
    </script>

    _.includes()第一个参数是需要查询的对象,第二个参数是需要查询的元素,第三个参数是开始查询的下标

    8、遍历循环
    <script type="text/javascript">
        _([1, 2]).forEach(function(value) {
            console.log(value);
        });
        _.forEach([1, 3] , function(value, key) {
            console.log(key,value);
        });
    </script>

    这两种方法都会分别输出‘1’和‘2’,不仅是数组,对象也可以,数组的是后key是元素的下标,当传入的是对象的时候,key是属性,value是值

     

    9、遍历循环执行某个方法
    <script type="text/javascript">
        function square(n) {
            return n * n;
        }
    
        console.log(_.map([4, 8], square));
        // => [16, 64]
    
        console.log(_.map({ 'a': 4, 'b': 8 }, square));
        // => [16, 64] (iteration order is not guaranteed)
    
        var users = [
            { 'user': 'barney' },
            { 'user': 'fred' }
        ];
    
        // The `_.property` iteratee shorthand.
        console.log(_.map(users, 'user'));
        // => ['barney', 'fred']
    </script>
    10、检验值是否为空
    <script type="text/javascript">
        _.isEmpty(null);
        // => true
    
        _.isEmpty(true);
        // => true
    
        _.isEmpty(1);
        // => true
    
        _.isEmpty([1, 2, 3]);
        // => false
    
        _.isEmpty({ 'a': 1 });
        // => false
    </script>
    12、数组去重
    <script type="text/javascript">
        var arr1 = [2, 1, 2];
    
        var arr2 = _.uniq(arr1);
    
    
        function unique(arr) {
            var newArr = [];
            for (var i = 0; i < arr.length; i++) {
                if(newArr.indexOf(arr[i]) == -1){
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
    
        console.log(arr1);
        console.log(arr2);
        console.log(unique(arr1));
    </script>
    13、根据下标选择元素,分到两个数组
    var array = [5, 10, 15, 20];
    var evens = _.pullAt(array, 1, 3);
     
    console.log(array);
    // => [5, 15]
     
    console.log(evens);
    // => [10, 20]
    14、返回从结尾元素开始n个元素的数组切片
       // 倒数解构
       const [beforeLast, last] = lodash.takeRight([1, 2, 3, 4], 2)
       console.log(beforeLast, last) // 3 4
    14、zipObject
       lodash.zipObject(['a', 'b'], [1, 2]);
       // => { 'a': 1, 'b': 2 }
    15、zipObjectDeep
       lodash.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
       // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
    16、xor( 创建一个给定数组唯一值的数组 )
    _.xor([2, 1], [2, 3]);
    // => [1, 3]
  • 相关阅读:
    pycharm连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
    Linux 下清空或删除大文件内容的 5 种方法
    使用dos命令创建多模块Maven项目
    使用Java API创建(create),查看(describe),列举(list),删除(delete)Kafka主题(Topic)
    Kafka设计解析(二) Kafka High Availability (上)
    Kafka设计解析(一) Kafka背景及架构介绍
    nginx日志切割并使用flume-ng收集日志
    kafka迁移与扩容
    Kafka中的Message Delivary机制
    Kafka Topic动态迁移 (源代码解析)
  • 原文地址:https://www.cnblogs.com/hy96/p/13293102.html
Copyright © 2020-2023  润新知