摘要:是一个轻量级的工具函数库,它方便了日常开发中对数据的操作,提高了开发效率。根据平时开发中对数据的操作,我对常见的用法做了以下总结,方便今后的学习和整理。
Lodash是一个轻量级的JavaScript工具函数库,它方便了日常开发中对数据的操作,提高了开发效率。
日常开发中,通常会对数据,特别是数组和对象进行各种读写等操作:比如去重,拷贝,合并,过滤,求交集,求和等等。根据平时开发中对数据的操作,我对Lodash常见的用法做了以下总结,方便今后的学习和整理。
Array Create
创建一个数组,元素为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]Object Create
通过数组["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 = customer console.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, 5 console.log(random2) // 0, 1, 2, 3, 4, 5Data Type
判断数据类型
_.isNumber(value)_.isInteger(value)
...
_.isPlainObject(value)
let variable = "hello"; // Number console.log(_.isNumber(variable)); // Integer console.log(_.isInteger(variable)); // Boolean console.log(_.isBoolean(variable)); // String console.log(_.isString(variable)); // Null console.log(_.isNull(variable)); // Undefined console.log(_.isUndefined(variable)); // Array console.log(_.isArray(variable)); // Function console.log(_.isFunction(variable)); // Object console.log(_.isPlainObject(variable)); // Date console.log(_.isDate(variable)); // DOM element console.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"]
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/99636.html
摘要:中文文档目前我只找到了版本,现在已经更新到了,好多文档已经过期。而且中太多,有时候常用的几个我总是记不住名字,在这里贴出来,方便自己和大家。原生用法直接使用的根据条件去除某个元素。 lodash中文文档目前我只找到了3.10.x版本,现在lodash已经更新到4.17.x了,好多文档已经过期。而且lodash中api太多,有时候常用的几个我总是记不住名字,在这里贴出来,方便自己和大家。...
摘要:这里要介绍的是工作流中的一种很普遍的代码加工流程正常的业务逻辑开发流程需要经过预处理器如或,然后再经过后处理器如进行深加工。 还未看的,可以点击查看上两篇文章哟:Webpack 最佳实践总结(一)、Webpack 最佳实践总结(二) 好了,这篇是第三篇,也是完结篇,我感觉这一篇是最乱的一篇,凑合着看吧,不会让你失望的 整合 CSS 加工流 有时候,前端项目中除了 JavaScript ...
阅读 2027·2023-04-25 19:03
阅读 1200·2021-10-14 09:42
阅读 3364·2021-09-22 15:16
阅读 902·2021-09-10 10:51
阅读 1494·2021-09-06 15:00
阅读 2381·2019-08-30 15:55
阅读 452·2019-08-29 16:22
阅读 880·2019-08-26 13:49