zoukankan      html  css  js  c++  java
  • lodash常用的一些方法

    首先要明白的是lodash的所有函数都不会在原有的数据上进行操作,而是复制出一个新的数据而不改变原有数据。类似immutable.js的理念去处理。
    lodash是一套工具库,内部封装了很多字符串、数组、对象等常见数据类型的处理函数。
     
    lodash的引用
     
         import _ from 'lodash'

    <script src="https://cdn.bootcss.com/lodash.js/4.17.11/lodash.js"></script>
     
     
    用一个数组遍历来说明为什么要使用lodash
     
    常规数组遍历
    agent.forEach(function (n,key) {
        agent[key].agent_id = agent[key].agent_name;
       
    }) return agent;
    使用lodash来遍历
    _.forEach(agent,function(n,key) {
     
        agent[key].agent_id= agent[key].agent_name
     
    })
     
    这是一个常见的forEach的数组遍历,使用了lodash过后,_.forEach()这是一个值,而不是一个函数。就可以直接
     
    const arr = _.forEach();
     这时候arr就是新的数组agent。而在常规的js数组遍历中,还需要考虑return的值和this的指向问题。虽然这样看起来,二者相差不大,但是在实际的开发过程中,熟练的使用lodash能大大的提高开发的效率。
     
     
    _.sortBy
    _.sortBy(collection, [iteratees=[_.identity]])
     
    _sortBy仅是升序排序
    创建一个元素数组。 以 iteratee 处理的结果升序排序。 这个方法执行稳定排序,也就是说相同元素会保持原始排序。 iteratees 调用1个参数: (value)。
     
    var users = [
      { 'user': 'fred',   'age': 48 },
      { 'user': 'barney', 'age': 36 },
      { 'user': 'fred',   'age': 40 },
      { 'user': 'barney', 'age': 34 }
    ];
     
    _.sortBy(users, function(o) { return o.user; });
    // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     
    _.sortBy(users, ['user', 'age']);
    // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
     
    _.sortBy(users, 'user', function(o) {
      return Math.floor(o.age / 10);
    });
    // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     
     
     
    _.orderBy
    _.orderBy(collection, [iteratees=[_.identity]], [orders])
     
    此方法类似于_.sortBy,除了它允许指定 iteratee(迭代函数)结果如何排序。 如果没指定 orders(排序),所有值以升序排序。 否则,指定为"desc" 降序,或者指定为 "asc" 升序,排序对应值。
    var users = [
      { 'user': 'fred',   'age': 48 },
      { 'user': 'barney', 'age': 34 },
      { 'user': 'fred',   'age': 40 },
      { 'user': 'barney', 'age': 36 }
    ];
     
    // 以 `user` 降序排序 再  `age` 以降序排序。
    _.orderBy(users, ['user', 'age'], ['desc', 'desc']);
    // => objects for [['fred', 48], ['fred', 40], ['barney', 36], ['barney', 34]]
     
     
    再来总结一些lodash常用函数(还是推荐大家能去官网把所有的函数看一遍增加一些印象)
     
    1.chunk,将数组进行切分。(也是官网的第一个函数)
     
    const arr = [1,2,3,4,5,6,7,8,9];
    _.chunk(arr,2);
    // =>[[1,2],[3,4],[5,6],[7,8],[9]]
    这个函数把数组按照一定的长度分开,返回新的数组。(片段化数组)
     
    2.compact,去除假值。(将所有的空值,0,NaN过滤掉)
     
    _.compact(['1','2',' ',0])
    // => ['1','2']
    对应的还有一个数组去重函数,这在实际的开发中很有作用。
     
    3.uniq,数组去重。(将数组中的对象去重,只能是数组去重,不能是对象去重。)
     
    _.uniq([1,1,3])
    // => [1,3]
    这跟介绍的第二个函数compact有很好的配合作用。(后端接口传来的数据很多是有重复或者空值的,这时候就可以使用两个函数来过滤数据。ladash只是最基础的库,其实可以将几个函数封装起来组件自己的库。)
     
     
     
    4.filter和reject,过滤集合,传入匿名函数。(二者放在一起讨论的原因是,两个函数类似但返回的值是相反。)
     
    _.filter([1,2],x => x = 1)
    // => [1]
    _.reject([1,2],x => x=1)
    // => [2]
    这两个过滤器,第二个参数值是false的时候返回是reject的功能,相反是true的时候是filter。
    

      

     
     
     
    5.map和forEach,数组遍历。(相似)
     
    如果不明白map和forEach有什么相似的可以百度一下,简单说一下不同点就是,map的回调函数中是支持return返回值的。
     
    不过二者都不改变原来的数组。
     
     
    _.map([1,2],x => x+1)
    // => [2,3]
    推荐使用map。
     
    6.merge,参数合并。(merge函数像是Git的merge分支操作一样,将两个参数合并在一起。)
     
    官网的解释是,递归的将源对象和继承的可枚举字符串监控属性合并到目标对象中。源对象从左到右引用,后续来源将覆盖以前来源的属性分配。
     
     
    var object = {
      'a': [{ 'b': 2 }, { 'd': 4 }]
    };
    var other = {
      'a': [{ 'c': 3 }, { 'e': 5 }]
    };
    _.merge(object, other);
    // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
    这里就像借用官网的代码来解释一下了。在实际开发中,前端在接口的请求可以merge一下之前的query和现在改变的查询的值,再去请求后端接口的数据。
     
     
     
    7.extend,类似参数对象合并。
     
    function Foo() {
      this.a = 1;
    }
    function Bar() {
      this.c = 3;
    }
    Foo.prototype.b = 2;
    Bar.prototype.d = 4;
    _.assignIn({ 'a': 0 }, new Foo, new Bar);
    // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     
     
    8.cancat,数组连接
     
    var array = [1];
    var other = _.concat(array, 2, [3], [[4]]);
    console.log(other);
    // => [1, 2, 3, [4]]
    console.log(array);
    // => [1]
    可以接受多个参数,将多个参数合并为一个数组元素。
     
     
    9.keys ,取出对象中所有的key值组成新的数组。
     
    function Foo() {
      this.a = 1;
      this.b = 2;
    }
    Foo.prototype.c = 3;
    _.keys(new Foo);
    // => ['a', 'b'] (iteration order is not guaranteed)
    _.keys('hi');
    // => ['0', '1']
     
     
    类似object.keys(),返回对象中可枚举属性的数组。
     
     
     
    _.range(10)
    //生成元素为0到9的数组
     
     
    _.times(10, (i)=>console.log(i))
    //循环10次
     
     
    _.uniqueId()
    //生成不同的id,用于元素中的id值再好不过
     
     
    _.startWith
    //判断字符串是否以xx开头
     
     
    _.endWith
    //判断字符串是否以xx结尾
     
     
    _.truncat
    //截取指定长度后加… 用于处理标题过长再好不过
     
     
    _.template
    //es6有字符串模板的语法,而lodash是es5的替代方案
     
     
    _.assign
    //合并,es6有Object.assign,类似于jQuery.extend
     
     
    _.assignIn
    //lodash里很多方法带In的都是可枚举原型链上的属性
     
     
    _.defaults
    //安全合并,即忽略undefined/null的重写
     
     
    _.findKey
    //根据value的属性值找key
     
     
    .mapKeys
    //遍历重写key, 相当于.forIn
     
     
    .mapValues
    //遍历重写value , 相当于.forIn
     
     
    _.invert
    //反转映射,快速通过value值找key
     
     
    _.omit
    //返回移除部分属性的副本,比如提交表单时有些字段不要提交
     
     
    _.pick
    //与omit相反,提取部分属性的副本,比如只提交某些字段
     
     
    _. clamp
    //确认所给值只在min,max之间
     
     
    _.max
    //最大
     
     
    _.min
    //最小
     
     
    _.sum
    //求和
     
     
    _.random
    //生成随机数
     
     
    _.round
    //四舍五入,允许指定精确位数
     
     
    _.isNumber
    _.isInterger
    _.isFunction
    _.isPlainObject
    _.isArray
    _.isDate
    _.isElement
     
     
    _.isNil
    //null or undefined
     
     
    _.isEmpty
    //{} or 空数组
     
     
    _.isEqual
    //支持对象和数组
     
     
    _.isMatch
    //匹配对象属性值
     
     
    _.cloneDeep
    //深度复制
     
     
    _.clone
    //浅复制
     
     
    _.once
    //只执行一次
     
     
    _.before
    //最多n-1次
     
     
    _.after
    //n次后执行
     
     
    _.debounce
    //忽略频繁执行
     
     
    _.union
    //合并两数组,去重
     
     
    _.uniq
    //去重
     
     
    _.pull(array,element1,element2)
    // 直接在array中移除元素,
     
     
    _.without(array,element1,element2)
    //得到新array中移除元素
     
     
    _.remove(array, function)
    //直接在array移除在function返回true的元素
     
     
    _.sameple(array)
    //随机取1
     
     
    _.samepleSize(array, int)
    //  随机取n
     
     
    _.shuffle(array)
    //乱序, jQuery.shuffle
     
     
    _.find(array, function | object)
    //根据function返回值和对象查找1个结果
     
     
    _.filter(array, function | object)
    //根据function返回值和对象查找多个结果
     
     
    _.groupBy(array, string)
    //分组,与多合一相反
     
     
    _.keyBy(array, string)
    //分组,类似groupBy, 但只有唯一值
     
     
    _.countBy(array, string)
    //分组统计
     
     
    _.orderBy(array, array, array)
    _.sortBy(array, array)
     
     
    _.difference(array1,array2)
    //找不同于array2,元素是Object用differenceBy
     
     
    _.xor(array1,array2)
    //得到非交集,元素是Object用xorBy
     
     
    _.intersection(array1,array2)
    //得到交集,元素是Object用intersectionBy
     
     
     
     
  • 相关阅读:
    构造函数初始化与赋值
    C代码中如何调用C++ C++中如何调用C
    C用函数指针模拟重载 C++重载
    【2019.10.30】意料之外的小黄衫——获得小黄衫感言
    【2019.10.30】SDN上机第1次作业
    【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)
    【2019.10.07】《重生之我是程序员》
    【2019.09.30】“福大同好”——原型设计展示~
    【2019.09.30】构建之法《四五八章读后感》
    【2019.09.25】《构建之法》前三章读后感
  • 原文地址:https://www.cnblogs.com/t-sun-j/p/10642568.html
Copyright © 2011-2022 走看看