0 准备

  • 下载:
1
yarn add lodash / npm i lodash
  • Node.js引入:
1
const _  = require('lodash')

1 对象

1.1 移除对象上的一些属性-omit

  • 把数据提交给接口,很多情况下,都要移除只在前端用,但接口不需要的属性。

  • API:

1
_.omit(object, [props])
  • 参数说明:

    object (Object): 来源对象。

    [props] (...(string|string[])): 要被忽略的属性。(注:单独指定或指定在数组中。)

  • 示例:

1
2
const obj = { name:'gsq', age:19, gender:'male', hobbies:'play' }
_.omit(obj,['name', 'age']) // { gender:'male', hobbies:'play' }

1.2 选择对象上的一些属性-pick

  • 选择对象上的一些属性和移除属性操作相反。

  • API:

1
_.pick(object, [props])
  • 示例
1
2
const obj = { name:'gsq', age:19, gender:'male', hobbies:'play' }
_.pick(obj,['name', 'age']) // { name:'gsq', age:19 }

1.3 对象的深拷贝-cloneDeep

  • 对象的深度克隆是很困难的。 JSON.parse(JSON.stringify(obj)) 可以实现对象的深度克隆。但有如下缺点:

    • 值类型是 undefined、function、symbol 的属性会被过滤掉。
    • 是类型是 set、map 会被被处理成空对象。
    • 对象的属性间出现循环引用时,会报错。
  • API:

1
_.cloneDeep(obj)
  • 示例:
1
2
3
4
5
const obj2 = { f: function () { }, u: undefined, a: 1, }
const r1 = JSON.parse(JSON.stringify(obj2))
console.log('r1', r1)// r1 { a: 1 }
const r2 = _.cloneDeep(obj2)
console.log('r2', r2)// r2 { f: [Function: f], u: undefined, a: 1 }

2 数组

2.1 根据条件去除某个元素-reject

  • 根据条件删除数组中某个元素(与fliter相反)

  • API:

1
_.reject(collection, identity)
  • 参数说明

    identity:判断依据,可以是数组、对象、字符串或回调函数

  • 示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
var users = [
  { 'user': 'gsq', 'age': 36, 'active': false },
  { 'user': 'zs',   'age': 40, 'active': true }
];
 
_.reject(users, function(o) { return !o.active; });
// [ { user: 'zs', age: 40, active: true } ]
 
_.reject(users, { 'age': 40, 'active': true });
// [ { user: 'gsq', age: 36, active: false } ]

_.reject(users, ['active', false]);
// [ { user: 'zs', age: 40, active: true } ]
 
_.reject(users, 'active');
// [ { user: 'gsq', age: 36, active: false } ]

2.2 数组转换为对象-keyBy

  • 以某个属性为键,转换数组为对象

  • API:

1
_.keyBy(collection, key)
  • 参数说明:

    collection:Array | Object

    key:Array | Function | Object | string

    返回新的对象

  • 示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const array = [
  { 'dir': 'left', 'code': 97 },
  { 'dir': 'right', 'code': 100 }
];
 
_.keyBy(array, function(o) {
  return String.fromCharCode(o.code);
});
// { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
 
_.keyBy(array, 'dir');
// { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }

3 语言

3.1 判断是否为空-isEmpty

  • 检查 value 是否为一个空对象,集合,映射或者set。 判断的依据是除非是有枚举属性的对象,length 大于 0 的 arguments object, array, string 或类jquery选择器。
  • API:
1
_.isEmpty(value)
  • 示例:
1
2
3
4
5
6
7
// 以上均返回true
_.isEmpty(false)
_.isEmpty(0)
_.isEmpty([])
_.isEmpty({})
_.isEmpty(null)
_.isEmpty(undefined)

3.2 防抖

3.3 节流

4 数学

4.1 随机数-random

  • 产生一个包括 lowerupper 之间的数。 如果只提供一个参数返回一个0到提供数之间的数。 如果 floating 设为 true,或者 lowerupper 是浮点数,结果返回浮点数。
  • API:
1
_.random([lower=0], [upper=1], [floating])
  • 参数说明

    [lower=0] (number): 下限。

    [upper=1] (number): 上限。

    [floating] (boolean): 指定是否返回浮点数。

  • 示例:

1
2
3
4
5
6
7
8
_.random(0, 5);
// => an integer between 0 and 5
_.random(5);
// => also an integer between 0 and 5
_.random(5, true);
// => a floating-point number between 0 and 5
_.random(1.2, 5.2);
// => a floating-point number between 1.2 and 5.2