Vue中 引入使用 Lodash

简介: Vue中 引入使用 Lodash

1. 简介

Lodash 中文网

Lodash 是一个著名的 javascript 原生库,不需要引入其他第三方依赖,是一个意在提高开发者效率,提高 JS 原生方法性能的JS 库。简单的说就是,很多方法 lodash 已经帮你写好了,直接调用就行,不用自己费尽心思去写了,而且可以统一方法的一致性。Lodash 使用了一个简单的 _ 符号,就像 Jquery 的 $ 一样,十分简洁。类似的还有 Underscore.js 和 Lazy.js。

2. 安装

浏览器环境:

<script src="lodash.js"></script>

通过 npm:

npm i --save lodash

引入完整版本:

var _ = require('lodash');

3. 常见函数的使用

3.1 N次循环

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

export default {
  methods: {
    usePrimordial(){
      for(var i = 0; i < 5; i++){
          console.log(i); // 0 1 2 3 4
      }
    },
    useLodash(){
      var _ = require('lodash');
      _.times(5,function(a){
        console.log(a); // 0 1 2 3 4
      });
    }
  }
}
</script>

3.2 深层查找属性值

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

<script>
export default {
  data(){
    return{
      ownerArr:[
        {
          "owner": "Colin",
          "pets": [{"name": "dog1"}, {"name": "dog2"}]
        },{
          "owner": "John",
          "pets": [{"name": "dog3"}, {"name": "dog4"}]
        }
      ]
    }
  },
  methods: {
    usePrimordial(){
      var jsMap = this.ownerArr.map((owner)=> {
        return owner.pets[0].name;
      });
      console.log(jsMap); // ["dog1", "dog3"]
    },
    useLodash(){
      var _ = require('lodash');
      var lodashMap = _.map(this.ownerArr, 'pets[0].name');
      console.log(lodashMap); // ["dog1", "dog3"]
    }
  },
  beforeMount(){
    this.usePrimordial()
    this.useLodash()
  }
}
</script>

3.3 深克隆对象

深度克隆 JavaScript 对象是困难的,并且也没有什么简单的解决方案。

你可以使用原生的解决方案: JSON.parse(JSON.stringify(objectToClone)) 进行深度克隆。但是,这种方案仅在对象内部没有方法的时候才可行。

<script>
export default {
  data(){
    return{
      objA:{
        a: 1,
        b: 2,
        c: {
          c1: 3,
          c2:function(){ // 无法实现对对象中方法的深拷贝
            console.log('深拷贝') 
          }
        }
      }
    }
  },
  methods: {
    useLodash(){
      var _ = require('lodash');
      var objB = _.cloneDeep(this.objA);
      console.log(this.objA); // {a:1,b:2,c:{c1:3,c2:f()}}
      console.log(objB); // {a:1,b:2,c:{c1:3,c2:f()}}
    }
  },
  beforeMount(){
    this.useLodash()
  }
}
</script>

3.4 在指定范围内获取一个随机值

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

<script>
export default {
  data(){
    return{
    }
  },
  methods: {
    usePrimordial(min,max){
      console.log(Math.floor(Math.random() * (max - min)) + min) // 18
    },
    useLodash(min,max){
      var _ = require('lodash');
      console.log(_.random(min,max)) // 16
    }
  },
  beforeMount(){
    this.usePrimordial(15,20)
    this.useLodash(15,20)
  }
}
</script>

3.5 在检验值是否为空

_.isEmpty()

<script>
export default {
  methods: {
    useLodash(){
      var _ = require('lodash');
      console.log(_.isEmpty(null)); // true
      console.log(_.isEmpty(true)); // true
      console.log(_.isEmpty(1)); // true
      console.log(_.isEmpty([1, 2, 3])); //  false
      console.log(_.isEmpty({ 'a': 1 })); //  false
    }
  },
  beforeMount(){
    this.useLodash()
  }
}
</script>

3.6 查找属性

_.find() 第一个返回真值的第一个元素。
_.filter() 返回真值的所有元素的数组。
_.reject() 是_.filter的反向方法,不返回真值的(集合)元素
<script>
export default {
  data(){
    return{
      users:[
        {'user': 'barney', 'age': 36, 'active': true},
        {'user': 'fred', 'age': 40, 'active': false},
        {'user': 'pebbles', 'age': 1, 'active': true}
      ]
    }
  },
  methods: {
    useLodash(){
      var _ = require('lodash');
      console.log(_.find(this.users, function (o) {return o.age < 40})); 
      // {user: 'barney', age: 36, active: true},
      console.log(_.find(this.users, {'age': 1, 'active': true})); 
      // {user: 'pebbles', age: 1, active: true}
      console.log(_.filter(this.users, {'age': 1, 'active': true}));
      // [{user: 'pebbles', age: 1, active: true}]
      console.log(_.find(this.users, ['active', false]));
      // {user: 'fred', age: 40, active: false},
      console.log(_.filter(this.users, ['active', false]));
      // [{user: 'fred', age: 40, active: false}]
      console.log(_.filter(this.users, 'active'));
      // [{user: 'barney', age: 36, active: true},{user: 'pebbles', age: 1, active: true}]
      console.log(_.reject(this.users, 'active'));
      // [{user: 'fred', age: 40, active: false}]
    }
  },
  beforeMount(){
    this.useLodash()
  }
}
</script>

3.7 查找属性

_.uniq(array) 创建一个去重后的 array 数组副本。

参数:array 要检查的数组。

<script>
export default {
  data(){
    return{
      arr1 : [2, 1, 2, 1, 4, 2, 3],
      arr2 : [2, 1, 2, 1, 4, 2, 3]
    }
  },
  methods: {
    usePrimordial(arr){
      var newArr = [];
      for (var i = 0; i < arr.length; i++) {
        if(newArr.indexOf(arr[i]) == -1){
          newArr.push(arr[i]);
        }
      }
      console.log(newArr)  // [2,1,4,3]
    },
    useLodash(){
      var _ = require('lodash');
      let ldnewArr = _.uniq(this.arr1);
      console.log(ldnewArr) // [2,1,4,3]
    }
  },
  beforeMount(){
    this.usePrimordial(this.arr1)
    this.useLodash()
  }
}
</script>
_.uniqBy(array,[iteratee=_.identity]) 这个方法类似 _.uniq,除了它接受一个 iteratee(迭代函数),
调用每一个数组(array)的每个元素以产生唯一性计算的标准。
iteratee 调用时会传入一个参数:(value)。
<script>
export default {
  methods: {
    useLodash(){
      var _ = require('lodash');
      // Math.floor 只是向下取整,去重,并没有改变原有的数组,所以还是2.1和1.2,不是2和1。
      console.log(_.uniqBy([2.1, 1.2, 2.3], Math.floor)); // [2.1, 1.2]
      console.log(_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x')); // [{ 'x': 1 }, { 'x': 2 }]
    }
  },
  beforeMount(){
    this.useLodash()
  }
}
</script>

3.8 模板插入

_.template([string=’’], [options={}])

<div id="container"></div>
<script src="https://cdn.bootcss.com/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        var data = [{name: '戈德斯文'}, {name: '柴硕'}, {name: '杨海月'}];
        var t = _.template($("#tpl").html());
        $("#container").html(t(data));
    });
</script>
<script type="text/template" id="tpl">
    <% _.each(obj,function(e,i){ %>
        <ul>
            <li><%= e.name %><%= i %></li>
        </ul>
    <%})%>
</script>
注意:这个 <script> 标签的 type 是 text/template,类似于 react 的 JSX 的写法,就是 js 和 html 可以混写,
用 <% %> 括起来的就是 js 代码,可以执行,直接写的就是 html 的标签,并且有类似 MVC 框架的的数据绑定,
在 <%= %> 中可以调用到数据呈现。
相关文章
|
9天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
9天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
8天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
14天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
15天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
15天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
15天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
14天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
16天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
14天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
下一篇
无影云桌面