Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。它里面封装了许多字符串、数组、对象、函数的方法,熟练使用这些方法可以大大加快我们的开发效率,这里我总结了些常用的方法,也希望大家可以去官方看看那些方法,混个脸熟!

首先要明白的是lodash的所有函数都不会在原有的数据上进行操作,而是复制出一个新的数据而不改变原有数据。

引入

这里两种引用方法任选其一,记得安装

import _ from 'lodash'

<script src="https://cdn.bootcss.com/lodash.js/4.17.11/lodash.js"></script>

常用函数方法

字符串

驼峰写法(_.camelCase)
_.camelCase('Foo Bar');
// => 'fooBar'
 
_.camelCase('--foo-bar--');
// => 'fooBar'
 
_.camelCase('__FOO_BAR__');

// => 'fooBar'
首字母大写(_.capitalize)
_.capitalize('FRED');
// => 'Fred'
首字母小写(_.lowerFirst)
_.lowerFirst('Fred');
// => 'fred'
 
_.lowerFirst('FRED');
// => 'fRED'
填充字符串至指定长度(_.pad)
_.pad('abc', 8);
// => '  abc   '
 
_.pad('abc', 8, '_-');
// => '_-abc_-_'
 
_.pad('abc', 3);
// => 'abc' 
重复 N 次给定字符串(_.repeat)
_.repeat('*', 3);
// => '***'
 
_.repeat('abc', 2);
// => 'abcabc'
 
_.repeat('abc', 0);
// => ''
替换 string 字符串中某一部分(_.replace)
_.replace('Hi Fred', 'Fred', 'Barney');
// => 'Hi Barney'
检查字符串是否以某个 target 开头(_.startsWith)
_.startsWith('abc', 'a');
// => true
 
_.startsWith('abc', 'b');
// => false
 
_.startsWith('abc', 'b', 1);
// => true
拆分字符串中的单词为词组(_.words)
_.words('fred, barney, & pebbles');
// => ['fred', 'barney', 'pebbles']
 
_.words('fred, barney, & pebbles', /[^, ]+/g);
// => ['fred', 'barney', '&', 'pebbles']
截断字符串并用指定字符代替(_.truncate)
_.truncate('hi-diddly-ho there, neighborino');
// => 'hi-diddly-ho there, neighbo...'
 
_.truncate('hi-diddly-ho there, neighborino', {
  'length': 24,
  'separator': ' '
});
// => 'hi-diddly-ho there,...'
 
_.truncate('hi-diddly-ho there, neighborino', {
  'length': 24,
  'separator': /,? +/
});
// => 'hi-diddly-ho there...'
 
_.truncate('hi-diddly-ho there, neighborino', {
  'omission': ' [...]'
});
// => 'hi-diddly-ho there, neig [...]'

数组

将数组进行切分(_.chunk)
const arr = [1,2,3,4,5,6,7,8,9];
_.chunk(arr,2);
// =>[[1,2],[3,4],[5,6],[7,8],[9]]
去除假值(_.compact)(将所有的空值,0,NaN过滤掉)

_.compact(['1','2',' ',0])
// => ['1','2']
数组去重(_.uniq)(将数组中的对象去重,只能是数组去重,不能是对象去重)
_.uniq([1,1,3])
// => [1,3]
过滤集合,传入匿名函数(_.filter和_.reject)

_.filter([1,2],x => x = 1)
// => [1]
 
_.reject([1,2],x => x=1)
// => [2]
参数合并(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 }] }
参数对象合并(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 }
取出对象中所有的key值组成新的数组(keys)
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 中选中的属性的对象,返回新对象(_.pick)
var object = { 'a': 1, 'b': '2', 'c': 3 };
 
_.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }
忽略属性之外的object自身和继承的可枚举属性组成,返回新对象(_.omit(object, [props])
var object = { 'a': 1, 'b': '2', 'c': 3 };
 
_.omit(object, ['a', 'c']);
// => { 'b': '2' }
实现深拷贝_.cloneDeep(value)
var objects = [{ 'a': 1 }, { 'b': 2 }];
 
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
最后修改:2021 年 12 月 05 日
感谢大哥送来的卡布奇诺和冰阔乐!