提示:记录工作中遇到的需求及解决办法
文章目录
- 前言
- 一、用于格式化数字成为货币形式,即添加逗号作为千位分隔符,并保留两位小数。
- 二、获取xxxx-xx-xx 或 xxxx-xx-xx xx:xx:xx 时间
- 三、将对象中字段名替换为新的名称。
- 四、从URL中提取查询参数并返回一个对象。
- 五、计算UTF-8编码字符串的字节长度。
- 六、移除数组中的所有假值
- 七、将一个JSON对象转换成URL查询字符串。
- 八、从URL中解析查询字符串并将其转换为JavaScript对象。
- 九、将HTML字符串转换为纯文本。
- 十、深度合并两个对象的功能。
- 十一、切换HTML元素上的CSS类名。
- 十二、防抖
- 十三、深拷贝一个对象(包括嵌套的对象和数组)
- 十四、去除数组中的重复元素。
- 十五、生成一个唯一的字符串。
- 十六、检查一个HTML元素(ele)是否包含指定的CSS类(cls)
- 十七、向一个HTML元素(ele)添加指定的CSS类(cls)。
- 十八、从一个HTML元素(ele)中移除指定的CSS类(cls)
- 十九、检查给定的值是否存在于该映射表中。
- 二十、将字符串 str 中每个单词的首字母转换为大写
- 二十一、将一个下划线分隔的字符串 str 转换为驼峰式命名(camelCase)
- 二十二、检查一个字符串 str 是否表示一个数字(整数或浮点数)
前言
在工作中我们经常需要对数据进行一些处理,所以我们会使用自定义函数来处理数据,于是可以封装成工具函数重复使用
提示:以下是本篇文章正文内容,下面案例可供参考
一、用于格式化数字成为货币形式,即添加逗号作为千位分隔符,并保留两位小数。
/**
* 用于格式化数字成为货币形式,即添加逗号作为千位分隔符,并保留 指定 位小数。
* @param {*} cost 待格式化的数字
* @param {*} precis 保留的小数位数(默认为2)
* @returns
*/
function moneyFilter (cost, precis = 2) {
var money = Number(cost).toFixed(precis).split(".");
money[0] = money[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return money.join(".");
}
二、获取xxxx-xx-xx 或 xxxx-xx-xx xx:xx:xx 时间
/**
* 获取xxxx-xx-xx、xxxx-xx-xx xx:xx:xx
* @param {Number} data
* @param {Boolean} flag 是否需要 时:分:秒
* @returns
*/
getFormatDate (data, flag = false) {
const date = data ? new Date(data) : new Date()
var year = date.getFullYear()
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
var hours = ("0" + date.getHours()).slice(-2);
var minutes = ("0" + date.getMinutes()).slice(-2);
var seconds = ("0" + date.getSeconds()).slice(-2);
let nowDa = year + "-" + month + "-" + day + " ";
if (flag) {
nowDa += ' ' + hours + ":" + minutes + ":" + seconds;
}
return nowDa
}
三、将对象中字段名替换为新的名称。
/**
* 将对象中字段名替换为新的名称。
* @param {*} data 目标对象数据源
* @param {*} fieldNames 需要替换的字段对象
* @returns
*/
changeFieldNames (data, fieldNames) {
if (Array.isArray(data)) {
return data.map((item) => this.changeFieldNames(item, fieldNames));
} else if (typeof data === "object") {
const newData = {
};
for (let key in data) {
if (fieldNames.hasOwnProperty(key)) {
newData[fieldNames[key]] = this.changeFieldNames(
data[key],
fieldNames
);
} else {
newData[key] = this.changeFieldNames(data[key], fieldNames);
}
}
return newData;
} else {
return data;
}
}
例:
这是一个简单的例子,说明如何使用这个函数:
const originalData = {
oldName1: 'value1',
oldName2: {
subOldName1: 'subValue1',
subOldName2: 'subValue2'
},
oldName3: ['item1', 'item2']
};
const fieldNames = {
oldName1: 'newName1',
oldName2: 'newName2',
oldName3: 'newName3',
subOldName1: 'subNewName1',
subOldName2: 'subNewName2'
};
const transformedData = changeFieldNames(originalData, fieldNames);
console.log(transformedData);
输出将是:
{
newName1: 'value1',
newName2: {
subNewName1: 'subValue1',
subNewName2: 'subValue2'
},
newName3: ['item1', 'item2']
}
请注意,这个函数假设 fieldNames 对象包含所有需要替换的旧字段名,并且它们的值是新字段名。如果原始数据中存在 fieldNames 对象中没有的字段,这个函数将保留原始字段名。
四、从URL中提取查询参数并返回一个对象。
这个函数的目的是解析URL中的查询字符串(即URL中问号(?)后面的部分),并将每个查询参数转换为键值对的形式。
/**
* 从URL中提取查询参数并返回一个对象。
* @param {string} url
* @returns {Object}
*/
getQueryObject (url) {
url = url == null ? window.location.href : url
const search = url.substring(url.lastIndexOf('?') + 1)
const obj = {
}
const reg = /([^?&=]+)=([^?&=]*)/g
search.replace(reg, (rs, $1, $2) => {
const name = decodeURIComponent