lodash常用的方法,我都给你总结出来了

2,867 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Array方法

chunk() 把数组拆分成一个二维数组,拆分后的第1个数组的长度为第二个参数的值

console.log(_.chunk(['a', 'b', 'c', 'd'], 2));	//[["a", "b"],["c", "d"]]

difference() 在第一个数组中把第二个数组里的数据都排除掉

console.log(_.difference([1, 3, 5, 7, 9], [3, 7]));	// [1, 5, 9]

drop() 切掉数组的前n(第二个参数,默认为1)位

console.log(_.drop(['a', 'b', 'c', 'd', 'e'], 2));	//['c', 'd', 'e']

//dropRight()   切割数组,切掉数组的后n位

take() 提取数组的前n(第二个参数,默认为1)位。与drop方法相反

console.log(_.take(['a', 'b', 'c', 'd', 'e'], 2));

flattenDeep() 把数组递归为一维数组。相当于[].flat(Infinity)

console.log(_.flattenDeep(['a', ['b', ['c', ['d']]]]));	//["a", "b", "c", "d"]

union() 取数组的并集(合并起来,去掉重复的)

console.log(_.union([2], [1, 2]));	//[2, 1]

zip() 把各数组中索引值相同的数据放到一起,组成新数组

console.log(_.zip(['小明', '小红', '小刚'], ['男', '女', '男'], [12, 13, 14]));	
//[["小明", "男", 12],["小红", "女", 13],["小刚", "男", 14]]

zipObject() 与上面方法一样,区别是它输出的是对象

console.log(_.zipObject(['小明', '小红', '小刚'], ['男', '女', '男'], [12, 13, 14]));	
//{小明: "男", 小红: "女", 小刚: "男"}

Collection方法

countBy() 按照一定规则统计数量,key循环次数,value为匹配到的数量

console.log(_.countBy(['one', 'two', 'three'], 'length'));	
//{3: 2, 5: 1}	按每个字符串的length进行统计,length为3的有两个数据。length为5的有1个数据

groupBy() 按照一定规则进行分组,key为循环次数,value为匹配到的数组

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

orderBy() 排序,既能升序又能降序

var users = [
		{ 'user': 'fred', 'age': 48 },
		{ 'user': 'barney', 'age': 34 },
		{ 'user': 'fred', 'age': 40 },
		{ 'user': 'barney', 'age': 36 }
	];
console.log(
		_.orderBy(users, 'age', 'asc'),	//以age属性的值进行升序排序
		_.orderBy(users, 'user', 'desc'),	//以user属性的值进行降序排序
	);

sample() 从数组中随机取一个数据

console.log(_.sample(['a', 'b', 'c', 'd', 'e']));

sampleSize() 获得 n 个随机数据

console.log(_.sampleSize(['a', 'b', 'c', 'd', 'e'], 3));

function方法

defer() 推迟调用函数,在第二次事件循环的时候调用

_.defer(function (text) {
	console.log(text);
}, '第二次事件循环');
console.log('第一次事件循环');

flip() 调用函数时翻转参数

function fn1() {
    console.log(arguments);
}
fn1 = _.flip(fn1);
fn1(1, 2, 3);

negate() 结果取反函数

function fn2(n) {
	return n % 2 == 0;
};
console.log(_.filter([1, 2, 3, 4, 5, 6], _.negate(fn2)));	//[1, 3, 5]

once() 函数只能调用一次

function fn3(){
	console.log('fn3');
	}
var newFn3=_.once(fn3);
newFn3();
newFn3();

Lang方法

castArray() 强制转为数组,其实就是在外面加一层方括号

console.log(
	_.castArray('a'),	//["a"]
	_.castArray({ a: 1, b: 2 }),	//[{a: 1, b: 2}]
);

clone() 浅拷贝

var obj1 = {
	a: 1,
	b: {
        c: 2
	}
};
var obj2 = _.clone(obj1);
console.log(obj1, obj2);
obj2.b.c = 3, console.log(obj1, obj2);

cloneDeep() 深拷贝

var obj3 = _.cloneDeep(obj1);
obj3.b.c = 4, console.log(obj1, obj3);

conformsTo() 通过第二个参数来检测对象的属性值是否满足条件

var object = { 'a': 1, 'b': 2 };
console.log(
	_.conformsTo(object, { 'b': function (n) { return n > 1 } }),	//true
	_.conformsTo(object, { 'b': function (n) { return n > 2 } }),	//false
);

Object方法

at() 根据传入的属性创建一个数组

var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
console.log(_.at(object, ['a[0].b.c', 'a[1]']));	//[3, 4]

defaults() 合并对象,与assign()一样,不过assign方法合并时遇到相同的属性,后面的会覆盖前面的。defaults刚好相反,前面的覆盖后面的

console.log(
	_.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }),	//{a: 1, b: 2}
	_.assign({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }),	//{a: 3, b: 2}
);

invert() 把对象的key与value颠倒,后面的属性会覆盖前面的属性

var object = { 'a': 1, 'b': 2, 'c': 1 };
console.log(_.invert(object));	//{1: "c", 2: "b"}

omit() 删除对象里的属性

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

pick() 筛选对象里的属性

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

String方法

camelCase() 转换字符串为驼峰格式

console.log(
	_.camelCase('kaivon_chen'),
	_.camelCase('kaivon chen'),
);

kebabCase() 转换字符为加-的形式

console.log(_.kebabCase('k a i'));	//k-a-i

words() 把字符串的单词拆分成数组

console.log(_.words('kaivon chen'));	//["kaivon", "chen"]

更多请看官网