Lodash 常用函数集合

96 阅读5分钟

Lodash 常用函数集合

_.chunk(array, [size=1])

将数组拆分成多个大小固定的块。

参数:

  • array (Array): 需要拆分的数组。
  • [size=1] (number): 每个块的大小。

返回值: (Array): 返回拆分后的新数组。

示例:

_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]

_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]

_.compact(array)

创建一个移除了所有 falsy 值的数组副本。

参数:

  • array (Array): 需要处理的数组。

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

示例:

_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]

_.debounce(func, [wait=0], [options={}])

创建一个 debounce 函数,该函数会延迟 wait 毫秒后调用 func 方法。

参数:

  • func (Function): 需要延迟调用的函数。
  • [wait=0] (number): 延迟的时间(毫秒)。
  • [options={}] (Object): 配置对象。

返回值: (Function): 返回延迟执行的函数。

示例:

_.debounce(() => {
  console.log('Hello World');
}, 2000);
// 在 2 秒后输出 'Hello World'

_.difference(array, [values])

创建一个从第一个数组中移除所有给定值的数组。

参数:

  • array (Array): 需要处理的数组。
  • [values] (...Array): 要排除的值。

返回值: (Array): 返回新的排除指定值后的数组。

示例:

_.difference([2, 1, 5], [2, 3]);
// => [1, 5]

.flatMap(array, [iteratee=.identity])

创建一个通过转换每个元素后拍平的数组。

参数:

  • array (Array): 需要处理的数组。
  • [iteratee=_.identity] (Function): 对每个元素进行转换的函数。

返回值: (Array): 返回拍平处理后的新数组。

示例:

function duplicate(n) {
  return [n, n];
}

_.flatMap([1, 2], duplicate);
// => [1, 1, 2, 2]

_.flatten(array)

减少一个嵌套多层的数组为一维数组。

参数:

  • array (Array): 需要减少维度的数组。

返回值: (Array): 返回减少维度后的新数组。

示例:

_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]

.groupBy(collection, [iteratee=.identity])

创建一个按照给定条件分组的对象。

参数:

  • collection (Array|Object): 需要分组的集合。
  • [iteratee=_.identity] (Function|string): 对每个元素进行分组的函数或属性名称。

返回值: (Object): 返回分组后的对象。

示例:

_.groupBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': [4.2], '6': [6.1, 6.3] }

_.groupBy(['one', 'two', 'three'], 'length');
// => { '3': ['one', 'two'], '5': ['three'] }

.orderBy(collection, [iteratees=[.identity]], [orders])

根据指定的条件对集合进行排序。

参数:

  • collection (Array|Object): 需要排序的集合。
  • [iteratees=[_.identity]] (...(Function|Function[]|string|string[])): 排序的条件,可以是函数或属性名称。
  • [orders] (...(string|string[])): 每个排序条件的顺序,可以是 "asc" 或 "desc"。

返回值: (Array): 返回排好序的新数组。

示例:

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 }
];

_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
// => [{ 'user': 'barney', 'age': 36 }, { 'user': 'barney', 'age': 34 }, { 'user': 'fred', 'age': 48 }, { 'user': 'fred', 'age': 40 }]

.partition(collection, [predicate=.identity])

创建一个根据给定条件分成两个数组的集合。

参数:

  • collection (Array|Object): 需要分组的集合。
  • [predicate=_.identity] (Function): 进行分组的条件函数。

返回值: (Array): 返回分组后的新数组。

示例:

_.partition([1, 2, 3], n => n % 2);
// => [[1, 3], [2]]

_.sample(collection)

从集合中随机获取一个元素。

参数:

  • collection (Array|Object): 需要采样的集合。

返回值: (*): 返回随机获取的元素。

示例:

_.sample([1, 2, 3, 4]);
// => 2

_.shuffle(collection)

打乱集合中元素的顺序。

参数:

  • collection (Array|Object): 需要打乱顺序的集合。

返回值: (Array): 返回打乱顺序后的新数组。

示例:

_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]

_.throttle(func, [wait=0], [options={}])

创建一个 throttle 函数,该函数会每隔一段时间调用 func 方法。

参数:

  • func (Function): 需要延迟调用的函数。
  • [wait=0] (number): 延迟的时间(毫秒)。
  • [options={}] (Object): 配置对象。

返回值: (Function): 返回定时执行的函数。

示例:

_.throttle(() => {
  console.log('Hello World');
}, 2000);
// 每隔 2 秒输出 'Hello World'

_.union(...arrays)

创建一个包含所有给定数组中唯一值的数组。

参数:

  • ...arrays (...Array): 需要合并的数组。

返回值: (Array): 返回包含所有唯一值的新数组。

示例:

_.union([2], [1, 2]);
// => [2, 1]

_.uniq(array)

创建一个去重后的数组副本。

参数:

  • array (Array): 需要去重的数组。

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

示例:

_.uniq([2, 1, 2]);
// => [2, 1]

_.zip(...arrays)

将多个数组中相同位置的元素合并到一起。

参数:

  • ...arrays (...Array): 需要合并的数组。

返回值: (Array): 返回合并后的新数组。

示例:

_.zip(['a', 'b'], [1, 2], [true, false]);
// => [['a', 1, true], ['b', 2, false]]

_.zipObject(props, [values=[]])

创建一个对象,键值对由两个分别为 propsvalues 的数组组成。

参数:

  • props (Array|string): 对象的键的名称。
  • [values=[]] (Array): 对象的值。

返回值: (Object): 返回生成的新对象。

示例:

_.zipObject(['a', 'b'], [1, 2]);
// => { 'a': 1, 'b': 2 }

_.clone(value)

创建一个浅拷贝的副本。

参数:

  • value (*): 需要复制的值。

返回值: (*): 返回浅拷贝后的新值。

示例:

var objects = [{ 'a': 1 }, { 'b': 2 }];

var shallow = _.clone(objects);
console.log(shallow[0] === objects[0]);
// => true

_.cloneDeep(value)

创建一个深拷贝的副本。

参数:

  • value (*): 需要复制的值。

返回值: (*): 返回深拷贝后的新值。

示例:

var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false

_.get(object, path, [defaultValue])

获取对象中指定路径上的值。

参数:

  • object (Object): 需要获取值的对象。
  • path (Array|string): 对象中要访问的路径。
  • [defaultValue] (*): 如果找不到对应的值,返回该默认值。

返回值: (*): 返回获取到的值。

示例:

var 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'

_.has(object, path)

检查对象中是否有指定路径上的属性。

参数:

  • object (Object): 要检查的对象。
  • path (Array|string): 要检查的路径。

返回值: (boolean): 如果对象中有该属性,则返回 true;否则返回 false。

示例:

var object = { 'a': { 'b': 2 } };

_.has(object, 'a');
// => true

_.has(object, 'a.b');
// => true

_.has(object, ['a', 'b']);
// => true

_.has(object, 'b');
// => false

_.invert(object)

创建一个将对象中的键与值互换后的新对象。

参数:

  • object (Object): 需要互换键值对的对象。

返回值: (Object): 返回互换键值对后的新对象。

示例:

var object = { 'a': 1, 'b': 2, 'c': 1 };

_.invert(object);
// => { '1': 'c', '2': 'b' }

_.keys(object)

获取对象中所有可枚举属性的名称数组。

参数:

  • object (Object): 需要获取属性名的对象。

返回值: (Array): 返回属性名数组。

示例:

function Foo() {
  this.a = 1;
  this.b = 2;
}

Foo.prototype.c = 3;

_.keys(new Foo);
// => ['a', 'b'] (无法获取原型链中的 c 属性)

_.keys('hi');
// => ['0', '1'] (获取字符串中的索引)

_.merge(object, ...sources)

将多个源对象合并到目标对象上。

参数:

  • object (Object): 目标对象。
  • ...sources (...Object): 多个源对象。

返回值: (Object): 返回合并后的目标对象。

示例:

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 }] }