常用的lodash方法
1.chunk,将数组进行切分。
const arr = [1,2,3,4,5,6,7,8,9];
_.chunk(arr,2);
// =>[[1,2],[3,4],[5,6],[7,8],[9]]
这个函数把数组按照一定的长度分开,返回新的数组。(片段化数组)
2.compact,去除假值。(将所有的空值,0,NaN过滤掉)
_.compact(['1','2',' ',0])
// => ['1','2']对应的还有一个数组去重函数,这在实际的开发中很有作用。
3.filter和reject,过滤集合,传入匿名函数。(二者放在一起讨论的原因是,两个函数类似但返回的值是相反。)
//示例1:
_.filter([1,2],x => x = 1)
// => [1]
_.reject([1,2],x => x=1)
// => [2]
这两个过滤器,第二个参数值是false的时候返回是reject的功能,相反是true的时候是filter。
//示例2:
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.filter(users, function(o) { return !o.active; });
// => {user: "fred", age: 36, active: true}
// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => {user: "fred", age: 36, active: true}
4.map和forEach,数组遍历。(相似)
map的回调函数中是支持return返回值的。不过二者都不改变原来的数组。
_.map([1,2],x => x+1)
// => [2,3]
推荐使用map
5.merge,参数合并。(区别于assign:assign 函数不会处理原型链上的属性,也不会合并相同的属性,而是用后面的属性值覆盖前面的属性值
merge 遇到相同属性名的时候,如果属性值是纯对象或集合的时候,会合并属性值)
const aa = _.assign({},{a:1},{a:2},{b:3})
//{a:2,b:3}
const bb = _.merge({},{a:1},{a:2},{b:3})
//{a:2,b:3}
const a1 = _.assign({},{a:1},{b:{a:1,b:2}},{b:{a:3}})
//{a:1,b:{a:3}}
const a2 = _.merge({},{a:1},{b:{a:1,b:2}},{b:{a:3}})
//{a:1,b:{a:3,b:2}}
6.sumby,sortby,orderBy,数组对象求和、排序(区别:sortby升序排序,orderBy指定为"desc" 降序,或者指定为 "asc" 升序,默认升序)
var arrs = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
_.sumBy(arrs, k => k.n) //20
_.sumBy(arrs,'n') //20
var users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'pebbles', 'age': 1 }
];
_.sortBy(users,'age')
_.orderBy(users, ['user', 'age'], ['desc', 'desc']);
7.cancat数组连接,uniq数组去重,union合并两个数组去重
var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
console.log(other);
// => [1, 2, 3, [4]]
console.log(array);
// => [1]
可以接受多个参数,将多个参数合并为一个数组元素。
_.uniq([1,1,3])
// => [1,3]
这跟介绍的第二个函数compact有很好的配合作用。
_.union([2], [1, 2]); // => [2, 1]
8.keys ,取出对象中所有的key值组成新的数组。
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.keys(),返回对象中可枚举属性的数组。
其他:
_.drop //去除array前面的n个元素,n默认是1_.range(10)
//生成元素为0到9的数组
_.times(10, (i)=>console.log(i))
//循环10次
_.uniqueId()
//生成不同的id,用于元素中的id值再好不过
_.startWith
//判断字符串是否以xx开头(es6中为startsWith)
_.endWith
//判断字符串是否以xx结尾(es6中为endsWith)
_.truncat
//截取指定长度后加… 用于处理标题过长再好不过
_.template
//es6有字符串模板的语法,而lodash是es5的替代方案
_.assign
//下一个对象的属性会覆盖上一个对象的属性,es6有Object.assign,类似于jQuery.extend
_.assignIn
//lodash里很多方法带In的都是可枚举原型链上的属性
_.defaults
//安全合并,即忽略undefined/null的重写
_.findKey
//根据value的属性值找key
.mapKeys
//遍历重写key, 相当于.forIn
.mapValues
//遍历重写value , 相当于.forIn
_.invert
//反转映射,快速通过value值找key
_.omit
//返回移除部分属性的副本,比如提交表单时有些字段不要提交
_.pick
//与omit相反,提取部分属性的副本,比如只提交某些字段
_. clamp
//确认所给值只在min,max之间
_.max
//最大
_.min
//最小
_.sum
//求和
_.random
//生成随机数
_.round
//四舍五入,允许指定精确位数
_.isNumber
_.isInterger
_.isFunction
_.isPlainObject
_.isArray
_.isDate
_.isElement
_.isNil
//null or undefined
_.isEmpty
//{} or 空数组
_.isEqual
//支持对象和数组
_.isMatch
//匹配对象属性值
_.cloneDeep
//深度复制
_.clone
//浅复制
_.once
//只执行一次
_.before
//最多n-1次
_.after
//n次后执行
_.debounce
//忽略频繁执行
_.union
//合并两数组,去重
_.uniq
//去重
_.pull(array,element1,element2)
// 直接在array中移除元素,
_.without(array,element1,element2)
//得到新array中移除元素
_.remove(array, function)
//直接在array移除在function返回true的元素
_.sameple(array)
//随机取1
_.samepleSize(array, int)
// 随机取n
_.shuffle(array)
//乱序, jQuery.shuffle
_.find(array, function | object)
//根据function返回值和对象查找1个结果
_.filter(array, function | object)
//根据function返回值和对象查找多个结果
_.groupBy(array, string)
//分组,与多合一相反
_.keyBy(array, string)
//分组,类似groupBy, 但只有唯一值
_.countBy(array, string)
//分组统计
_.orderBy(array, array, array)
_.sortBy(array, array)
_.difference(array1,array2)
//找不同于array2,元素是Object用differenceBy
_.xor(array1,array2)
//得到非交集,元素是Object用xorBy
_.intersection(array1,array2)
//得到交集,元素是Object用intersectionBy