持续更新中...
数字字符串转换为带千分位逗号的格式,并且保留小数部分
const solution=(s)=>{
// 负数
let isMinus = false
if (str < 0) {
isMinus = true
// 转化为正数计算
str = str * -1
}
// 去除前导零
s = s.replace(/^0+/, '');
if (s === '') return '0';
// 分离整数和小数部分
let [integerPart, decimalPart] = s.split('.');
decimalPart = decimalPart ? '.' + decimalPart : '';
// 使用正则表达式添加千分位逗号
integerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return (isMinus ? '-' : '') + integerPart + decimalPart;
}
数组对象排序
const arraySort = (key, sortType = 1) => {
if (sortType === 1) {
// 升序
return (val1, val2) => {
if (val1[key] > val2[key]) {
return 1
} else if (val1[key] < val2[key]) {
return -1
} else {
return 0
}
}
} else {
// 降序
return (val1, val2) => {
if (val1[key] < val2[key]) {
return 1
} else if (val1[key] > val2[key]) {
return -1
} else {
return 0
}
}
}
}
生成唯一值
在处理数据的时候,我们需要唯一值作为key值来确定操作的是哪条数据。
const setUuid = () => {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
const r = Math.random() * 16 | 0
const v = c === 'x' ? r : (r & 0x3 | 0x8)
return v.toString(16)
})
}
把不规则的一维日期数组整合为连续的日期区间二维数组
在项目开发过程中,由于一些特殊的判断给定的可选日期存在不连续的情况,此方法主要是为了判断当前选择的日期区间是否为连续的日期。
const groupDates = (dates) => {
if (dates.length === 0) {
return []
}
// 将字符串日期转换为 Date 对象,并按照日期先后排序
const dateObjects = dates
.map((dateStr) => new Date(dateStr))
.sort((a, b) => a - b)
// 初始化结果数组
const result = []
let tempGroup = [dateObjects[0]]
// 遍历日期对象数组,检查连续的日期
for (let i = 1; i < dateObjects.length; i++) {
const currentDate = dateObjects[i]
const previousDate = dateObjects[i - 1]
// 判断是否为连续日期
const diffInDays = (currentDate - previousDate) / (1000 * 60 * 60 * 24)
if (diffInDays === 1) {
// 如果是连续日期,添加到当前分组
tempGroup.push(currentDate)
} else {
// 如果不是连续日期,将当前分组加入结果,并重新开始一个新的分组
result.push(tempGroup.map((date) => date.toISOString().slice(0, 10)))
tempGroup = [currentDate]
}
}
// 将最后一个分组加入结果数组
if (tempGroup.length > 0) {
result.push(tempGroup.map((date) => date.toISOString().slice(0, 10)))
}
return result
}