lodash常用方法

本博客 hjy-xh,转载请申明出处

数组操作

chunk

将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块

入参

  1. array (Array): 需要处理的数组
  2. [size=1] (number): 每个数组区块的长度

返回值

(Array): 返回一个包含拆分区块的新数组(注:相当于一个二维数组)

1
2
3
const arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const result = _.chunk(arr, 3);
console.log(result); // [ [ 'a', 'b', 'c' ], [ 'd', 'e', 'f' ], [ 'g' ] ]

compact

创建一个新数组,包含原数组中所有的非假值元素。例如false, null,0, "", undefined, 和 NaN 都是被认为是“假值”

入参

  1. array (Array): 需要处理的数组

返回值

(Array): 返回过滤掉假值的新数组

1
2
3
const arr = ['a', '', 0, false, true, undefined, NaN];
const result = _.compact(arr);
console.log(result); // [ 'a', true ]

difference

创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array 参数)排除了给定数组中的值。)该方法使用SameValueZero做相等比较。结果值的顺序是由第一个数组中的顺序确定

入参

  1. array (Array): 要检查的数组
  2. [values] (…Array): 排除的值

返回值

(Array): 返回过滤掉假值的新数组

1
2
3
const arr1 = ['可乐', '雪碧'];
const arr2 = ['雪碧'];
console.log(_.difference(arr1, arr2)); // [ '可乐' ]
1
2
3
4
// 如果想要比较引用类型,可以使用`differenceBy`
const arr1 = [{ name: '可乐' }, { name: '雪碧' }];
const arr2 = [{ name: '雪碧' }];
console.log(_.difference(arr1, arr2)); // [ { name: '可乐' }, { name: '雪碧' } ]
1
2
3
const arr1 = [{ name: '可乐' }, { name: '雪碧' }];
const arr2 = [{ name: '雪碧' }];
console.log(_.differenceBy(arr1, arr2, (item) => item.name)); // [ { name: '可乐' } ]

flattenDeep

array递归为一维数组

入参

  1. array (Array): 需要处理的数组

返回值

(Array):返回一个的新一维数组

1
2
3
const arr = [0, 1, 2, [3, 4, [5]]];
const result = _.flattenDeep(arr);
console.log(result); // [ 0, 1, 2, 3, 4, 5 ]

uniq

创建一个去重后的array数组副本。使用了SameValueZero 做等值比较。只有第一次出现的元素才会被保留

入参

  1. array (Array): 要检查的数组

返回值

(Array):返回新的去重后的数组

1
2
3
const arr = [1, 2, 1];
const result = _.uniq(arr);
console.log(result); // [ 1, 2 ]
1
2
3
// 如果想要去重引用类型,可以使用`unionBy`
const arr1 = [{ name: '可乐' }, { name: '可乐' }];
console.log(_.unionBy(arr1, (item) => item.name)); // [ { name: '可乐' } ]

groupBy

创建一个对象,key 是 iteratee 遍历 collection(集合) 中的每个元素返回的结果。 分组值的顺序是由他们出现在 collection(集合) 中的顺序确定的。每个键对应的值负责生成 key 的元素组成的数组。iteratee 调用 1 个参数: (value)

入参

1.collection (Array|Object): 一个用来迭代的集合。

2.[iteratee=_.identity] (Array|Function|Object|string): 这个迭代函数用来转换key

返回值

(Array):返回新的去重后的数组

对象操作

omit

这个对象由忽略属性之外的object自身和继承的可枚举属性组成

入参

  1. object (Object): 来源对象。
  2. [props] (…(string|string[])): 要被忽略的属性

返回值

(Object): 返回一个组成聚合的对象

1
2
const object = { 'a': 1, 'b': '2', 'c': 3 };
console.log(_.omit(object, ['a', 'c'])); // { b: '2' }

omitBy

这个对象忽略 predicate(断言函数)判断不是真值的属性后,object自身和继承的可枚举属性组成。predicate调用与2个参数:*(value, key)*

入参

  1. object (Object): 来源对象
  2. [predicate=_.identity] (Function): 调用每一个属性的函数

返回值

(Object): 返回新对象

1
2
const object = { 'a': 1, 'b': '2', 'c': 3 };
console.log(_.omitBy(object, (key, value) => typeof object[value] === 'number')); // { b: '2' }

pick

创建一个从 object 中选中的属性的对象

入参

  1. object (Object): 来源对象。
  2. [props] (…(string|string[])): 要被选中的属性

返回值

(Object): 返回新对象

1
2
const object = { 'a': 1, 'b': '2', 'c': 3 };
console.log(_.pick(object, ['a', 'c'])); // { a: 1, c: 3 }

pickBy

创建一个对象,这个对象组成为从 object 中经 predicate 判断为真值的属性。 predicate调用2个参数:*(value, key)*。

入参

  1. object (Object): 来源对象。
  2. [predicate=_.identity] (Function): 调用每一个属性的函数

返回值

(Object): 返回新对象

1
2
const object = { 'a': 1, 'b': '2', 'c': 3 };
console.log(_.pickBy(object, _.isNumber)); // { a: 1, c: 3 }

get

根据 object对象的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代

入参

  1. object (Object): 要检索的对象
  2. path (Array|string): 要获取属性的路径
  3. [defaultValue] (*): 如果解析值是 undefined ,这值会被返回

返回值

(*): 返回解析的值

1
2
3
4
5
const object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c'); // 3
_.get(object, ['a', '0', 'b', 'c']); // 3
_.get(object, 'a.b.c', 'default'); // 'default'