常用JavaScript工具函数封装与优化

ops/2024/12/26 17:56:00/

通用JavaScript方法封装

在现代Web开发中,许多应用程序都需要处理常见的操作,如日期格式化、表单重置、数据字典回显、树形结构数据构建等。为了提高开发效率并减少重复代码,我们可以将这些常用的操作封装成通用函数,以便在多个项目中复用。以下是一些常用的JavaScript方法封装,它们可以大大简化前端开发中的任务。

1. 日期格式化 parseTime

日期和时间的格式化是Web开发中经常遇到的需求,parseTime 方法能够将时间对象或时间戳格式化为指定格式的字符串。

javascript
复制代码
export function parseTime(time, pattern) {if (arguments.length === 0 || !time) {return null;}const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}';let date;if (typeof time === 'object') {date = time;} else {if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {time = parseInt(time);} else if (typeof time === 'string') {time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/.[\d]{3}/gm), '');}if ((typeof time === 'number') && (time.toString().length === 10)) {time = time * 1000;}date = new Date(time);}const formatObj = {y: date.getFullYear(),m: date.getMonth() + 1,d: date.getDate(),h: date.getHours(),i: date.getMinutes(),s: date.getSeconds(),a: date.getDay()};const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {let value = formatObj[key];if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value]; }if (result.length > 0 && value < 10) {value = '0' + value;}return value || 0;});return time_str;
}

2. 表单重置 resetForm

在开发中,表单重置是一个常见需求。resetForm 方法可以快速清空表单中的所有数据,重置表单字段。

javascript
复制代码
export function resetForm(refName) {if (this.$refs[refName]) {this.$refs[refName].resetFields();}
}

3. 添加日期范围 addDateRange

在某些情况下,我们需要将用户选择的日期范围添加到请求参数中。addDateRange 方法能够将日期范围自动添加到请求参数中。

javascript
复制代码
export function addDateRange(params, dateRange, propName) {let search = params;search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};dateRange = Array.isArray(dateRange) ? dateRange : [];if (typeof (propName) === 'undefined') {search.params['beginTime'] = dateRange[0];search.params['endTime'] = dateRange[1];} else {search.params['begin' + propName] = dateRange[0];search.params['end' + propName] = dateRange[1];}return search;
}

4. 数据字典回显 selectDictLabelselectDictLabels

前端开发中,我们经常需要将后端返回的数值字典转化为用户友好的标签。selectDictLabelselectDictLabels 方法可以帮助你实现这一点。

javascript
复制代码
export function selectDictLabel(datas, value) {if (value === undefined) {return "";}var actions = [];Object.keys(datas).some((key) => {if (datas[key].value == ('' + value)) {actions.push(datas[key].label);return true;}})if (actions.length === 0) {actions.push(value);}return actions.join('');
}export function selectDictLabels(datas, value, separator) {if (value === undefined || value.length === 0) {return "";}if (Array.isArray(value)) {value = value.join(",");}var actions = [];var currentSeparator = undefined === separator ? "," : separator;var temp = value.split(currentSeparator);Object.keys(value.split(currentSeparator)).some((val) => {var match = false;Object.keys(datas).some((key) => {if (datas[key].value == ('' + temp[val])) {actions.push(datas[key].label + currentSeparator);match = true;}})if (!match) {actions.push(temp[val] + currentSeparator);}})return actions.join('').substring(0, actions.join('').length - 1);
}

5. 字符串格式化 sprintf

字符串格式化是另一种常见需求,sprintf 方法可以将占位符 %s 替换为实际的参数。

javascript
复制代码
export function sprintf(str) {var args = arguments, flag = true, i = 1;str = str.replace(/%s/g, function () {var arg = args[i++];if (typeof arg === 'undefined') {flag = false;return '';}return arg;});return flag ? str : '';
}

6. 转换字符串为空 parseStrEmpty

在处理数据时,我们经常需要将 undefinednull 转换为空字符串。parseStrEmpty 方法可以帮助我们实现这一点。

javascript
复制代码
export function parseStrEmpty(str) {if (!str || str == "undefined" || str == "null") {return "";}return str;
}

7. 数据合并 mergeRecursive

mergeRecursive 方法可以将两个对象进行递归合并,合并过程中如果遇到对象类型的值会递归合并,非对象类型的值会覆盖源对象中的值。

javascript
复制代码
export function mergeRecursive(source, target) {for (var p in target) {try {if (target[p].constructor == Object) {source[p] = mergeRecursive(source[p], target[p]);} else {source[p] = target[p];}} catch (e) {source[p] = target[p];}}return source;
};

8. 构造树形结构数据 handleTree

构造树形结构数据在许多场景中都非常有用,特别是在处理菜单或组织结构数据时。handleTree 方法可以将扁平的数据转化为树形结构。

javascript
复制代码
export function handleTree(data, id, parentId, children) {let config = {id: id || 'id',parentId: parentId || 'parentId',childrenList: children || 'children'};var childrenListMap = {};var nodeIds = {};var tree = [];for (let d of data) {let parentId = d[config.parentId];if (childrenListMap[parentId] == null) {childrenListMap[parentId] = [];}nodeIds[d[config.id]] = d;childrenListMap[parentId].push(d);}for (let d of data) {let parentId = d[config.parentId];if (nodeIds[parentId] == null) {tree.push(d);}}for (let t of tree) {adaptToChildrenList(t);}function adaptToChildrenList(o) {if (childrenListMap[o[config.id]] !== null) {o[config.childrenList] = childrenListMap[o[config.id]];}if (o[config.childrenList]) {for (let c of o[config.childrenList]) {adaptToChildrenList(c);}}}return tree;
}

9. 参数处理 tansParams

有时我们需要将对象格式的参数转化为查询字符串格式,tansParams 方法可以将对象中的嵌套属性转换为URL参数格式。

javascript
复制代码
export function tansParams(params) {let result = '';for (const propName of Object.keys(params)) {const value = params[propName];var part = encodeURIComponent(propName) + "=";if (value !== null && value !== "" && typeof (value) !== "undefined") {if (typeof value === 'object') {for (const key of Object.keys(value)) {if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {let params = propName + '[' + key + ']';var subPart = encodeURIComponent(params) + "=";result += subPart + encodeURIComponent(value[key]) + "&";}}} else {result += part + encodeURIComponent(value) + "&";}}}return result;
}

10. 获取标准路径 getNormalPath

getNormalPath 方法能够修正路径格式,确保路径符合标准。

javascript
复制代码
export function getNormalPath(p) {if (p.length === 0 || !p || p == 'undefined') {return p;};let res = p.replace('//', '/');if (res[res.length - 1] === '/') {return res.slice(0, res.length - 1);}return res;
}

11. 验证Blob格式 blobValidate

blobValidate 方法可以判断文件是否为非JSON格式的Blob对象。

javascript
复制代码
export function blobValidate(data) {return data.type !== 'application/json';
}

通过将这些通用的方法封装成独立的函数,我们能够提高开发效率,并减少重复代码。这些函数能够帮助开发者轻松实现常见的需求,如日期格式化、表单操作、树形结构处理等,进而提升整个项目的可维护性和开发体验。

4o


http://www.ppmy.cn/ops/145176.html

相关文章

CSS|15 CSS3结构伪类border-collapse伪元素

15 CSS3 15.1 CSS3和CSS2之间的区别 css3 css2 新语法 新的属性 就是对css2进行扩充 删减 优化 15.2 结构伪类 案例一&#xff1a;结构伪类 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&qu…

深入理解.NET内存回收机制

&#xff3b;前言&#xff1a;&#xff3d;.Net平台提供了许多新功能&#xff0c;这些功能能够帮助程序员生产出更高效和稳定的代码。其中之一就是垃圾回收器(GC)。这篇文章将深入探讨这一功能&#xff0c;了解它是如何工作的以及如何编写代码来更好地使用这一.Net平台提供的功…

详细介绍如何使用rapidjson读取json文件

本文主要详细介绍如何使用rapidjson库来实现.json文件的读取&#xff0c;分为相关基础介绍、结合简单示例进行基础介绍、结合复杂示例进行详细的函数实现介绍等三部分。 一、相关基础 1、Json文件中的{} 和 [] 在 JSON 文件中&#xff0c;{} 和 [] 分别表示不同的数据结构&…

Java课程设计:基于tomcat+jsp+sqlserver的javaweb计算机配件报价系统

一、项目介绍 前台功能模块&#xff1a;系统首页、我的信息、留言板、用户登陆、公告以及日历模块 后台功能模块&#xff1a;修改个人信息、管理员管理、注册用户管理、类别信息管理、类别信息添加、散件信息管理、散件信息添加、公告信息管理、公告信息添加 二、项目技术栈…

Ubuntu 24使用systemctl配置service自动重启

总体流程和互联网上差不多 &#xff0c;但是Ubuntu 24的 system配置文件位于 /usr/lib/systemd/system/ 网上的文章还停留在/etc/下 让我一顿好找 举个例子 主要是添加这个参数 Restartalways [Unit] DescriptionBuda Website Service Afternetwork.target[Service] Type…

《Java 与 Deeplearning4j:开启深度学习高效训练之旅》

在当今科技飞速发展的时代&#xff0c;深度学习无疑是人工智能领域的一颗璀璨明珠。Java 作为一种广泛应用的编程语言&#xff0c;与 Deeplearning4j 框架的结合&#xff0c;为开发者们开辟了一条在深度学习领域大展身手的新路径。那么&#xff0c;如何在 Java 中高效地使用 De…

从自动驾驶到具身智能漫谈

0. 简介 从作者的眼光来看自动驾驶和具身智能已经是越来越接近了。无论是技术栈以及实现的最终目的。其实都是希望人在环内。这个是古月直播的文字相关的大致梳理。主要会展开聊一聊自动驾驶的变迁以及作为自动驾驶的从业人员要着重关注的一些技术点 1. 自动驾驶的变迁 在自…

linux安装idea

参考原网址&#xff1a;在Linux系统中安装idea教程_idea linux-CSDN博客 1.下载idea Download IntelliJ IDEA – The Leading Java and Kotlin IDE 选择Download&#xff0c;下载正确的文件名&#xff1a;ideaIU-2024.3.1.1.tar.gz 2.安装vim sudo apt install vim 3.解压…