Lodash是一个轻量级的JavaScript工具函数库,它方便了日常开发中对数据的操作,提高了开发效率。 日常开发中,通常会对数据,特别是数组和对象进行各种读写等操作:比如去重,拷贝,合并,过滤,求交集,求和等等。根据平时开发中对数据的操作,我对Lodash常见的用法做了以下总结,方便今后的学习和整理。ArrayCreate创建一个数组,元素为0, 1, 2, … , 23_.range([start=0], end, [step=1])let arr = .range(24)console.log(arr) // [0, 1, 2, 3, … , 23]创建一个数组,元素为100, 100, 100, 100, 100.fill(array, value, [start=0], [end=array.length])let arr = .fill(Array(5), 100)console.log(arr) // [100, 100, 100, 100, 100]Read获取数组中最后一个元素.last(array)let arr = [1, 2, 3, 4, 5]let lastElement = .last(arr) console.log(lastElement) // 5获取数组中倒数第二个元素.nth(array, [n=0])let arr = [1, 2, 3, 4, 5]let lastSecondElement = .nth(-2) console.log(lastSecondElement) // 4获取对象数组中某一同名属性的属性值集合.map(collection, [iteratee=.identity])let users = [{ id: 12, name: ‘Adam’, hobbies: [ {name: ‘running’, index: 100}, {name: ‘cycling’, index: 95} ] },{ id: 14, name: ‘Bob’, hobbies: [ {name: ‘movie’, index: 98}, {name: ‘music’, index: 85} ] },{ id: 16, name: ‘Charlie’, hobbies: [ {name: ’travelling’, index: 90}, {name: ‘fishing’, index: 88} ] },{ id: 18, name: ‘David’, hobbies: [ {name: ‘walking’, index: 99}, {name: ‘football’, index: 85} ] }]let userIds = .map(users, ‘id’)let mostFavouriteHobbies = .map(users, ‘hobbies[0].name’)console.log(userIds) // [12, 14, 16, 18]console.log(mostFavouriteHobbies) // [“running”, “movie”, “travelling”, “walking”]获取对象数组中某一属性值最大的对象.maxBy(array, [iteratee=.identity])let arr = [{a:1, b: 2, c: {d:4}}, {a:3, b: 4, c: {d:6}}]let maxBObj = .maxBy(arr, ‘b’)console.log(maxBObj) // {a: 3, b: 4, c: {d: 6}}找出两个数组中元素值相同的元素.intersection([arrays])let arr1 = [2, 1, {a: 1, b: 2}]let arr2 = [2, 3, {a: 1, b: 2}]let intersection = .intersection(arr1, arr2) console.log(intersection) // [2]求数值数组中元素值的平均数.mean(array)let numbers = [1, 2, 3, 4, 5]let average = .mean(numbers)console.log(average) // 3求对象数组中某个属性值的平均数.meanBy(array, [iteratee=.identity])let objects = [{ ’n’: 4 }, { ’n’: 2 }, { ’n’: 8 }, { ’n’: 6 }]let average = .meanBy(objects, ’n’)console.log(average) // 5获取数组中前n个元素,不改变原数组.take(array, [n=1])let arr = [1, 2, 3, 4, 5]let part1Arr = .take(arr, 4)let part2Arr = .take(arr, 6)let part3Arr = .take([], 5)console.log(part1Arr) // [1, 2, 3, 4]console.log(part2Arr) // [1, 2, 3, 4, 5]console.log(part3Arr) // []Delete删除数组中值为falsy的元素.compact(array)let arr = [0, 1, false, 2, ‘’, 3, null, undefined, NaN]let truthyArr = .compact(arr) console.log(truthyArr) // [1, 2, 3]Format去重。.uniq(array)let arr = [2, 1, 2, ‘2’, true]let uniqArr = .uniq(arr)console.log(uniqArr) // [2, 1, ‘2’, true]排序。对象数组,根据对象中的某个属性的值,升序或降序排序.orderBy(collection, [iteratees=[.identity]], [orders])let users = [ {user: ‘Tom’, age: 25}, {user: ‘Amy’, age: 23}, {user: ‘Perter’, age: 22}, {user: ‘Ben’, age: 29}]let sortedUsers = .orderBy(users, ‘age’, ‘desc’)console.log(sortedUsers)// [{user: “Ben”, age: 29}, {user: “Tom”, age: 25}, {user: “Amy”, age: 23}, {user: “Perter”, age: 22}]分割数组[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]为 [1, 2, 3, 4, 5] 和 [6, 7, 8, 9, 10].chunk(array, [size=1])let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]let [left, right] = .chunk(arr, 5)console.log(left) // [1, 2, 3, 4, 5]console.log(right) // [6, 7, 8, 9, 10]脱掉一层[].flatten(array)let address = { ‘江苏省’: [‘南京市’, ‘苏州市’], ‘浙江省’: [‘杭州市’, ‘绍兴市’]}let cities = .flatten(.values(address))console.log(cities) // [“南京市”, “苏州市”, “杭州市”, “绍兴市”]将多维数组转为一维数组.flattenDeep(array)let flattenedArr = .flattenDeep([1, [2, [3, [4]], 5]]);console.log(flattenedArr) // [1, 2, 3, 4, 5]ObjectCreate通过数组[“x”, “y”] 和 数组[10, 10] 创建对象 {x: 10, y: 10}.zipObject([props=[]], [values=[]])let keys = [“x”, “y”]let values = [10, 10]let obj = .zipObject(keys, values) console.log(obj) // {x: 10, y: 10}合并对象.assign(object, [sources])let desObj = {name: ‘’, gender: ‘male’, job: ‘developer’}let sourceObj = {name: ‘Tom’, job: ‘’}let mergedObj = .assign(desObj, sourceObj)console.log(mergedObj) // {name: “Tom”, gender: “male”, job: “"}深拷贝对象.cloneDeep(value)let sourceObj = {department_id: 1, permissions: {management: [1, 2, 3, 4], store: [11, 12, 13, 14]}}let desObj = .cloneDeep(sourceObj)desObj.permissions.store.push(15, 16)console.log(desObj)// {department_id: 1, permissions: {management: [1, 2, 3, 4], store: [11, 12, 13, 14, 15, 16]}}console.log(sourceObj)// {department_id: 1, permissions: {management: [1, 2, 3, 4], store: [11, 12, 13, 14]}}合并多个对象中key值相同的键值对.merge(object, [sources])let obj1 = {‘9’: {name: ‘乐购超市’}}let obj2 = {‘9’: {storeToken: ‘xxx’}}let obj3 = {‘9’: {storePosition: ‘Hangzhou’}}let mergedObj = .merge(obj1, obj2, obj3) console.log(mergedObj)// 9: {name: “乐购超市”, storeToken: “xxx”, storePosition: “Hangzhou”}Read判断对象中是否有某个属性.has(object, path)let obj = {a: [{b: {c: 3}}]}let hasC = .has(obj, ‘a[0].b.c’)console.log(hasC) // true获取对象中的某个属性的值.get(object, path, [defaultValue])let obj = {a: [{b: {c: 3}}]}let c = .get(obj, ‘a[0].b.c’)console.log(c) // 3Update设置对象中的某个属性的值.set(object, path, value)let obj = {a: [{b: {c: 3}}]}let newObj = .set(obj, ‘a[0].b.c’, 4);console.log(obj.a[0].b.c); // 4对多个对象相同属性的属性值求和。let customers = { new_customer: {0: 33, 1: 5, … , 23: 0}, old_customer: {0: 22, 1: 7, … , 24: 0}}let customer = {}let keys = .keys(customers.new_customer)let values = .values(customers).map(keys, key => { customer[key] = .sumBy(values, key)})customers.customer = customerconsole.log(customers)// console{ customer: {0: 55, 1: 12, … , 23: 0} new_customer: {0: 33, 1: 5, … , 23: 0} old_customer: {0: 22, 1: 7, … , 23: 0}}Number生成一个随机数,范围n~m.random([lower=0], [upper=1], [floating])let random1 = .random(2, 5)let random2 = .random(5)console.log(random1) // 2, 3, 4, 5console.log(random2) // 0, 1, 2, 3, 4, 5Data Type判断数据类型.isNumber(value).isInteger(value)….isPlainObject(value)let variable = ‘hello’;// Numberconsole.log(.isNumber(variable));// Integerconsole.log(.isInteger(variable));// Booleanconsole.log(.isBoolean(variable));// Stringconsole.log(.isString(variable));// Nullconsole.log(.isNull(variable));// Undefinedconsole.log(.isUndefined(variable));// Arrayconsole.log(.isArray(variable));// Functionconsole.log(.isFunction(variable));// Objectconsole.log(.isPlainObject(variable));// Dateconsole.log(.isDate(variable));// DOM elementconsole.log(.isElement(variable));数据类型转换_.toArray_.toArray(‘abc’) // [“a”, “b”, “c”].toInteger.toInteger(3.2); // 3_.toInteger(‘3.2’); // 3_.toNumber_.toNumber(‘3.2’) // 3.2_.toString_.toString(1); // “1”.toString([1, 2, 3]); // “1,2,3"Util重复多次某个元素.times(n, [iteratee=_.identity])const dateParams = _.times(2, () => ‘2018-08-27’);console.log(dateParams) // [“2018-08-27”, “2018-08-27”]