当前位置: 首页 > news >正文

【js】 lodash命名转换和封装

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 1️⃣ lodash转换函数
      • h3
      • 与underscore比较
    • 2️⃣ 实战:对象属性名转换
      • 函数封装
      • 单元测试
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

需求

爬虫中经常出现各种类型的命名,往往一个对象,几十个字段的命名风格都不是自己想要的,这时候就需要将整个对象自动转为自己想要的风格,而不是手动一个个转换。
{aBc: 1, en: 'khz', cnNew: '华仔'}
转为
{ a_bc: 1, en: 'khz', cn_new: '华仔' }

开发环境

版本号描述
文章日期2023-11-16
操作系统Win10 - 22H219045.3570
lodash4.17.21

1️⃣ lodash转换函数

Lodash 是一个 JavaScript 的工具库,它提供了一系列的函数来简化代码编写。Lodash 提供了很多功能,包括数组操作、对象操作、字符串操作等。

使用 Lodash 可以大大简化代码,提高代码的可读性和可维护性。它的函数提供了简单且一致的接口,可以帮助开发人员快速编写干净、可扩展的代码。

h3

lodash支持6个转行函数:

  • camelCase 转换字符串string为驼峰写法。
  • kebabCase 转换字符串string为烤串写法。
  • snakeCase 转换字符串string为下划线写法。
  • lowerCase 转换字符串string为小写 空格写法。
  • upperCase 转换字符串string为大写 空格写法。
  • startCase 转换字符串string为所有单词首字母大写,标题中常见写法。

本章节只关心前三种,示例如下:

import _ from 'lodash'function test() {// lodash库函数测试console.log(_.camelCase('a_bc')) // aBcconsole.log(_.snakeCase('aBc')) // a_bcconsole.log(_.kebabCase('aBc')) // a-bc
}

与underscore比较

underscore 库提供了一些实用的函数,用于简化 JavaScript 编程和提高开发效率。
underscore 内置了多种实用的函数,例如字符串操作、数组操作、对象操作、日期操作等等。这些函数都非常实用,可以在开发中大大简化代码,提高开发效率。

Underscore.js 和 Lodash.js 是 JavaScript 中开发人员使用最广泛的两个扩展库,它们主要用于简化和增强 JavaScript 代码。它们的名字很相似,功能也相似,但它们也存在一些差异:

  1. 发行时间 Underscore.js 发行于 2010 年,是最早的 JavaScript 扩展库,而 Lodash.js 发行于 2012 年。
  2. 函数数量和功能 Underscore.js 和 Lodash.js 都提供了大量的函数,以帮助开发人员处理常见的 JavaScript 操作。但 Lodash.js 比 Underscore.js 提供了更多的函数。总的来说,Lodash.js 在功能上比 Underscore.js 更为强大。
    3.性能 在某些情况下,Lodash.js 比 Underscore.js 具有更好的性能,因为它使用了一些优化技术。
  3. 社区和支持 由于历史原因, Underscore.js 的社区更为庞大,使用人数众多。而 Lodash.js 在最近几年得到了更多开发者的支持,因此它在社区和支持方面看起来更为活跃。

2️⃣ 实战:对象属性名转换

函数封装

本节对snakeCase、camelCase、kebabCase进行封装,三个函数结构类似,主要逻辑都是遍历对象key,将key转换后返回新的对象。
代码如下:

/*
1. 转换测试
2. 编写函数
3. 单元测试
*/import _ from 'lodash'function snakeCaseObject(originObj) {if (!_.isObject(originObj)) {return originObj}const ret = {};for (let key in originObj) {let val = originObj[key]// console.log(key, val)// 将key转换为下划线方式let keyNew = _.snakeCase(key)ret[keyNew] = val}return ret
}function camelCaseObject(originObj) {if (!_.isObject(originObj)) {return originObj}const ret = {};for (let key in originObj) {let val = originObj[key]// console.log(key, val)// 将key转换为驼峰方式let keyNew = _.camelCase(key)ret[keyNew] = val}return ret
}function kebabCaseObject(originObj) {if (!_.isObject(originObj)) {return originObj}const ret = {};for (let key in originObj) {let val = originObj[key]// console.log(key, val)// 将key转换let keyNew = _.kebabCase(key)ret[keyNew] = val}return ret
}export {camelCaseObject,snakeCaseObject,kebabCaseObject,
}

单元测试

import _ from 'lodash'
import {camelCaseObject, snakeCaseObject, kebabCaseObject} from '../../js/object.js'function test() {// 单元测试let obj = {aBc: 1, en: 'khz', cnNew: '华仔'}let objSnake = snakeCaseObject(obj)console.log(objSnake)  // { a_bc: 1, en: 'khz', cn_new: '华仔' }let objCamel = camelCaseObject(objSnake)console.log(objCamel)  // { aBc: 1, en: 'khz', cnNew: '华仔' }let objKebab = kebabCaseObject(objSnake)console.log(objKebab)  // { 'a-bc': 1, en: 'khz', 'cn-new': '华仔' }
}test()

🛬 文章小结

本章对lodash进行了介绍,并对其中的转换函数进行了简单的测试。
然后封装了几个函数用于工作中,节省人工,希望能对大家有所帮助。

📖 参考资料

  • lodash官网: https://www.lodashjs.com/

相关文章:

【js】 lodash命名转换和封装

▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ lodash转换函数h3与underscore比较 2️⃣ 实战:对象属性名转换函数封装单元测试 🛬 文章小结📖 参考资料 🛫 导读 需求 爬虫中经常出现各种类型的命名,往往一个对象…...

RK3568驱动指南|第七篇 设备树-第67章 of操作函数实验:获取属性

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...

vue3安装vue-router

环境 node 18.14.2 yarn 1.22.19 windows 11 vite快速创建vue项目 参考 安装vue-touter 官网 yarn add vue-router4src下新建router文件夹,该文件夹下新建index.ts // router/index.ts 文件 import { createRouter, createWebHashHistory, RouterOptions, Ro…...

〖大前端 - 基础入门三大核心之JS篇㊱〗- JavaScript 的DOM节点操作

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

【计算机基础】优雅的PPT就应该这样设计

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

Vatee万腾的科技征程:Vatee数字化创新的前沿探讨

在Vatee万腾的科技征程中,我们目睹了一场数字化创新的引领之旅,探讨了Vatee在科技前沿的独到见解。Vatee万腾不仅仅是一家科技公司,更是一支前行不辍的冒险队伍,通过不断突破自我,探索未知领域,引领着数字化…...

【PB续命05】WinHttp.WinHttpRequest的介绍与使用

0 WinHttp.WinHttpRequest简介 winhttp.winhttprequest是Windows操作系统中的一个API函数,用于创建和发送HTTP请求。它可以用于从Web服务器获取数据,或将数据发送到Web服务器。该函数提供了许多选项,例如设置请求头、设置代理服务器、设置超…...

【Linux】进程间是这样通信的--管道篇

TOC 目录 进程间通信的介绍 进程间通信的概念 进程间通信的目的 进程间通信的本质 进程间通信的分类 管道 什么是管道 匿名管道 pipe函数 匿名管道使用步骤 管道读写规则 管道的特点 1、管道内部自带同步与互斥机制 2、管道的生命周期随进程 3、管道提供的是流式…...

Python基础入门例程60-NP60 跳过列表的某个元素(循环语句)

最近的博文: Python基础入门例程59-NP59 提前结束的循环(循环语句)-CSDN博客 Python基础入门例程58-NP58 找到HR(循环语句)-CSDN博客 Python基础入门例程57-NP57 格式化清单(循环语句)-CSDN博客 目录 最近的博文: 描述...

三十二、W5100S/W5500+RP2040树莓派Pico<UPnP示例>

文章目录 1 前言2 简介2 .1 什么是UPnP?2.2 UPnP的优点2.3 UPnP数据交互原理2.4 UPnP应用场景 3 WIZnet以太网芯片4 UPnP示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着智能家居、物联网等…...

2023.11.18 Hadoop之 YARN

1.简介 Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。支持多个数据处理框架&…...

ceph 常用命令

bucket 常用命令 查看 realm (区域) radosgw-admin realm list输出 {"default_info": "43c462f5-5634-496e-ad4e-978d28c2x9090","realms": ["myrgw"] }radosgw-admin realm get{"id": "2cfc…...

6.8完全二叉树的节点个数(LC222-E)

算法: 如果不考虑完全二叉树的特性,直接把完全二叉树当作普通二叉树求节点数,其实也很简单。 递归法: 用什么顺序遍历都可以。 比如后序遍历(LRV):不断遍历左右子树的节点数,最后…...

基于协作mimo系统的RM编译码误码率matlab仿真,对比硬判决译码和软判决译码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... while(Err < TL…...

Django模型层

模型层 与数据库相关的&#xff0c;用于定义数据模型和数据库表结构。 在Django应用程序中&#xff0c;模型层是数据库和应用程序之间的接口&#xff0c;它负责处理所有与数据库相关的操作&#xff0c;例如创建、读取、更新和删除记录。Django的模型层还提供了一些高级功能 首…...

计算机视觉的应用18-一键抠图人像与更换背景的项目应用,可扩展批量抠图与背景替换

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用18-一键抠图人像与更换背景的项目应用&#xff0c;可扩展批量抠图与背景替换。该项目能够让你轻松地处理和编辑图片。这个项目的核心功能是一键抠图和更换背景。这个项目能够自动识别图片中的主体&…...

Redis(哈希Hash和发布订阅模式)

哈希是一个字符类型字段和值的映射表。 在Redis中&#xff0c;哈希是一种数据结构&#xff0c;用于存储键值对的集合。哈希可以理解为一个键值对的集合&#xff0c;其中每个键都对应一个值。哈希在Redis中的作用主要有以下几点&#xff1a; 1. 存储对象&#xff1a;哈希可以用…...

php正则表达式汇总

php正则表达式有"/pattern/“、”“、”$“、”.“、”[]“、”[]“、”[a-z]“、”[A-Z]“、”[0-9]“、”\d"、“\D”、“\w”、“\W”、“\s”、“\S”、“\b”、“*”、“”、“?”、“{n}”、“{n,}”、“{n,m}”、“\bword\b”、“(pattern)”、“x|y"和…...

Python与ArcGIS系列(八)通过python执行地理处理工具

目录 0 简述1 脚本执行地理处理工具2 在地理处理工具间建立联系0 简述 arcgis包含数百种可以通过python脚本执行的地理处理工具,这样就通过python可以处理复杂的工作和批处理。本篇将介绍如何利用arcpy实现执行地理处理工具以及在地理处理工具间建立联系。 1 脚本执行地理处理…...

cocos----刚体

刚体&#xff08;Rigidbody&#xff09; 刚体&#xff08;Rigidbody&#xff09;是运动学&#xff08;Kinematic&#xff09;中的一个概念&#xff0c;指在运动中和受力作用后&#xff0c;形状和大小不变&#xff0c;而且内部各点的相对位置不变的物体。在 Unity3D 中&#xff…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Redis——Cluster配置

目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. ‌范围分片&#xff08;顺序分片&#xff09;‌ 2. ‌哈希分片‌ 3. ‌虚拟槽分片&#xff08;Redis Cluster 方案&#xff09;‌ 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...

Go爬虫开发学习记录

Go爬虫开发学习记录 基础篇&#xff1a;使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能&#xff0c;是构建爬虫的基石&#xff1a; package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…...