let c = console.log
// 归类 groupBy 数组[number] 分组
let arr = [42.1, 42.3, 22.3, 22.5]
c(_.groupBy(arr, Math.floor)) // 根据函数迭代分类
arr = ['one', 'two', 'three', 'ten', 'olive']
c(_.groupBy(arr, 'length')) // 根据字段长度分类
c(_.groupBy(arr, 0)) // 根据指定第几个下标分类
arr = ['活宝', '呼呼', '呼吸', '死了', '活着'] // 中文分类
c(_.groupBy(arr, 0))
// 第二个参数,一种是传入函数进行迭代,一种是传入下标,比如0,按照第0个下标的值来归类。
// 出现的次数 countBy(数组,回调函数),回调函数返回下标,对下标进行次数累计。
c(_.countBy([6.1, 4, 6.2, 9, 9.3], Math.floor)) // 根据用户标签或者评价,统计喜好,出数据图。也可以用于页面点击统计,操作统计之类。
const emoFn = (v) => {
let cate = [
'一般',
'不喜欢',
'喜欢',
]
return cate.findIndex(item => v.includes(item))
}
c(_.countBy(['喜欢', '很喜欢', '一般', '一般', '不喜欢', '非常不喜欢'], emoFn))
// 排序 orderBy(数组,[字段1,字段2, ...], [排序方式,升序,降序, ...])
let users = [
{ 'user': '小明', 'age': 48, 'active': false },
{ 'user': '小红', 'age': 34, 'active': true },
{ 'user': '小白', 'age': 40, 'active': false },
{ 'user': '小花', 'age': 36, 'active': false }
]
c(_.orderBy(users, ['age'], ['desc']))
// 处理每个元素 invokeMap(数组,函数,函数的参数)
c(_.invokeMap([[5, 1, 7], [2, 3, 4]], 'sort')) // 多维数组排序
c(_.invokeMap([123, 456], String.prototype.split, '')) // 多维数组加引号
c(_.flatMap(_.invokeMap([123, 456], String.prototype.split, '',)).join('-')) // 将二维数组字符串化后,扁平化,最后分割。 1-2-3-4-5-6
// partition 数组[对象] 分组,产品分类,多类型分组。返回多个分组数组。
c(_.partition(users, {'age': 48}))
c(_.partition(users, {'active': false}))
c(_.partition(users, 'active')) // 根据该字段分组
// 返回随机数
c(_.sample([1,2, 3,4,5, 6, 7, 8, 9]))
// 返回n个随机数
c(_.sampleSize([1,2, 3,4,5, 6, 7, 8, 9], 2))
// 打乱值的数组
c(_.shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9]))
// 增强版 includes(数组,值,开始搜索位置)
c(_.includes([1, 2, 3], 1))
c(_.includes([1, 2, 3], 1, 2))
// 根据key分类 keyBy(数组,函数/key), 返回对象,{key作为新的下标:对象}
c(_.keyBy(users, 'age'))
c(_.keyBy(users, 'active')) // 相同的key会被最后一个代替。
通过观察,可以得出这样的使用技巧:相比es6的函数,lodash提供了一种更方便的方法来获取或转换结果:
比如:filter
es6
arr.filter(item => item === 0) // 单独提供一个函数方式,自行处理
lodash
_.filter(arr, 函数/数组/对象/字符串) // 多种类型的传入,更加方便开发者使用。
_.filter(arr, {'key', 0})
// 另外filter的反向方法是reject
ps:其他未写包括reduce,every,some,each,eachRight,findLast,flatMapDeep,flatMapDepth,forEach,forEachRight,map,size,reject