dh-yf-utils
v1.0.5
Published
常用工具类
Downloads
313
Readme
工具类函数
roundNumber
/**
* 对给定的数值进行四舍五入,并根据需要格式化为千分位字符串。
*
* @param value - 需要处理的数值,可以是数字或字符串形式。
* @param decimalPlaces - 保留的小数位数。
* @param formatThousands - 是否格式化为千分位,默认为 false。
* @returns 处理后的字符串形式的数值。
*/
roundNumber(1234.5678); // "1234.57"
roundNumber(1234.5678, 1); // "1234.6"
roundNumber(1234.5678, 3); // "1234.568"
roundNumber('1234.5678', 2, true); // "1,234.57"
roundNumber('1000', 2, true); // "1,000"
roundNumber('abc'); // ""
roundNumber(1000, 0, true); // "1,000"
onInputFixedN
/**
* 格式化给定的数字输入字符串,通过移除无效字符、处理负号、
* 并限制小数位数来确保输入的正确性。
*
* @param value - 要格式化的输入字符串。它应该表示一个数字值。
* @param decimalPlaces - 允许的小数位数,默认为 2。
* @param allowNegative - 一个布尔值,指示是否允许负数。默认为 false。
* @returns 一个格式化的字符串,表示具有指定限制的数字值。
*/
<el-input v-model="value" @keyup.native="value=onInputFixedN(value)"/>
onInputInt
/**
* 处理输入字符串,移除无效字符并格式化为整数形式。
* @param value - 输入的字符串,可能包含数字和其他字符。
* @param allowNegative - 是否允许负数,默认为 false。
* @returns 处理后的字符串,仅包含有效的整数表示。
*/
<el-input v-model="value" @keyup.native="value=onInputInt(value)"/>
parseTime
/**
* 将给定的时间输入解析为基于指定格式的日期字符串。
*
* @param time - 要解析的时间输入。可以是字符串、数字或 Date 对象。
* - 如果是表示时间戳或日期的字符串,将进行相应转换。
* - 如果是数字,将被视为时间戳(秒或毫秒)。
* @param pattern - 可选的格式模式,用于定义输出格式。
* - 默认格式为 '{y}-{m}-{d} {h}:{i}:{s}',表示 '年-月-日 时:分:秒'。
* @returns 返回基于提供的格式的格式化日期字符串,如果时间无效则返回 null。
*
*/
console.log(parseTime(new Date()));
// 输出: 当前日期和时间,例如 "2024-12-12 14:30:45"
console.log(parseTime(1609459200, '{y}/{m}/{d} 星期{a}'));
// 输出: "2021/01/01 星期五" (假设输入为秒数)
console.log(parseTime('2024-12-12', '{y}年{m}月{d}日'));
// 输出: "2024年12月12日"
console.log(parseTime('2024-12-12T14:30:45.123Z', '{h}:{i}:{s}'));
// 输出: "14:30:45" (根据时区可能会有所不同)
sprintf
/**
* 格式化字符串,通过替换 `%s` 占位符实现动态插入参数值。
*
* @param str - 包含 `%s` 占位符的字符串。
* @param args - 用于替换占位符的参数列表。
* @returns 返回格式化后的字符串,如果参数不足以替换所有 `%s`,则返回空字符串。
*/
sprintf("Hello, %s!", "world"); // "Hello, world!"
sprintf("%s is %s years old.", "Alice", 30); // "Alice is 30 years old."
sprintf("This is a %s test", "simple"); // "This is a simple test"
sprintf("Missing %s and %s", "one"); // ""
parseStrEmpty
/**
* 解析字符串,将 `undefined`、`null` 或空值转换为空字符串。
*
* @param str - 要解析的字符串,可以是 `string` 或 `undefined`。
* @returns 如果输入为 `undefined`、`"undefined"`、`"null"` 或空字符串,则返回空字符串 `""`;否则返回原字符串。
*/
parseStrEmpty(undefined); // ""
parseStrEmpty("undefined"); // ""
parseStrEmpty("null"); // ""
parseStrEmpty(""); // ""
parseStrEmpty("hello"); // "hello"
parseStrEmpty("nullish"); // "nullish"
mergeRecursive
/**
* 递归合并两个对象,将目标对象的属性合并到源对象中。
*
* @param source - 源对象,将被修改以包含目标对象的属性。
* @param target - 目标对象,其属性将合并到源对象中。
* @returns 返回合并后的源对象。
*/
const source = {
a: 1,
b: { c: 3, d: 4 }
};
const target = {
b: { c: 30, e: 5 },
f: 6
};
const result = mergeRecursive(source, target);
console.log(result);
// 输出: { a: 1, b: { c: 30, d: 4, e: 5 }, f: 6 }
handleTree
/**
* 将扁平结构的数据转换为树形结构。
*
* @param params - 包含数据和配置的对象。
* - `data` 是一个数组,包含需要转换为树形结构的节点。
* - `id` 是节点的唯一标识符的属性名,默认为 `'id'`。
* - `parentId` 是父节点标识符的属性名,默认为 `'parentId'`。
* - `children` 是子节点列表的属性名,默认为 `'children'`。
* @returns 返回树形结构的节点数组。
*/
const data = [
{ id: 1, parentId: null, name: 'Root 1' },
{ id: 2, parentId: 1, name: 'Child 1.1' },
{ id: 3, parentId: 1, name: 'Child 1.2' },
{ id: 4, parentId: 2, name: 'Child 1.1.1' },
{ id: 5, parentId: null, name: 'Root 2' },
{ id: 6, parentId: 5, name: 'Child 2.1' }
];
const tree = handleTree({ data });
[
{
"id": 1,
"parentId": null,
"name": "Root 1",
"children": [
{
"id": 2,
"parentId": 1,
"name": "Child 1.1",
"children": [
{
"id": 4,
"parentId": 2,
"name": "Child 1.1.1"
}
]
},
{
"id": 3,
"parentId": 1,
"name": "Child 1.2"
}
]
},
{
"id": 5,
"parentId": null,
"name": "Root 2",
"children": [
{
"id": 6,
"parentId": 5,
"name": "Child 2.1"
}
]
}
]
convertArrayToObject
/**
* 将对象数组转换为键值对对象,其中键和值字段可以指定。
*
* @param data - 要转换的对象数组。
* @param key - 用作结果对象键的字段名称。
* @param value - 用作结果对象值的字段名称。
* @returns 返回一个对象,其中键和值来自指定字段。
*/
const data = [
{ label: 'First', value: '1'},
{ label: 'Second', value: '2' },
{ label: 'Third', value: '3'}
];
const result = convertArrayToObject(data)
/*
{
"1": "First",
"2": "Second",
"3": "Third"
}
*/
tansParams
/**
* 将对象转换为 URL 查询参数字符串。
*
* @param params - 要转换的对象,其中的键值对将被编码为 URL 查询参数。
* @returns 返回一个字符串,表示对象转换后的查询参数。
*/
const params = {
name: "John Doe",
age: 30,
preferences: {
color: "blue",
food: "pizza"
},
emptyValue: "",
nullValue: null
};
const queryString = tansParams(params);
// name=John%20Doe&age=30&preferences%5Bcolor%5D=blue&preferences%5Bfood%5D=pizza
randomString
/**
* 生成指定长度的随机字符串。
*
* @param {number} [string_length=20] - 要生成的随机字符串的长度。默认为 20。
* @returns {string} 返回生成的随机字符串。
*/
const randomStr1 = randomString();
console.log(randomStr1); // 可能输出: 'a8BcD9EfGhIjKlMnOpQr'
const randomStr2 = randomString(10);
console.log(randomStr2); // 可能输出: 'ZxYwVuTsRq'
generateUUID
/**
* 生成一个 UUID(通用唯一标识符)。
* UUID 格式为 8-4-4-4-12,共 32 个字符的字符串。
*
* @returns 返回生成的 UUID 字符串。
*/
const uuid1 = generateUUID();
console.log(uuid1); // 可能输出: 'e7b1c9a1-7d5b-4c3d-9f1e-2f3a8c5d6e7f'
download
/**
* 通过创建一个临时链接来下载给定的数据。
*
* @param data - 要下载的数据,可以是任何类型。
* @param name - 下载文件的名称。
*/
download(data,'aaa.xlsx')
getParameter
/**
* 从 URL 或字符串中获取指定键的参数值。
*
* @param {string} key - 要获取的参数键。
* @param {string} [urlOrString=window.location.href] - 包含参数的 URL 或字符串。
* @returns {string | null} 返回与指定键对应的参数值,如果未找到则返回 null。
*/
// 假设当前 URL 是 'http://example.com/page?foo=bar#section?baz=qux'
const fooValue = getParameter('foo'); // 返回 'bar'
const bazValue = getParameter('baz'); // 返回 'qux'
const missingValue = getParameter('missing'); // 返回 null
// 提供一个特定的 URL
const paramValue = getParameter('key', '/test?key=value#hash?key2=value2');
// 返回 'value'
exportExcel
/**
* 导出数据为 Excel 文件。
*
* @param {Array<Object>} data - 要导出的数据数组,每个对象代表一行数据。
* @param {Array<string>} filterVal - 数据对象中需要导出的属性名数组。
* @param {Array<string>} header - Excel 表格的表头数组,与 `filterVal` 对应。
* @param {string} [filename='new-excel.xlsx'] - 导出的 Excel 文件名,默认为 'new-excel.xlsx'。
*
* @returns {void} 不返回任何值。
*
* @throws {Error} 如果数据为空或未定义,则会抛出警告并终止执行。
*/
// example
const data = [
{ name: 'Alice', age: 25, city: 'New York' },
{ name: 'Bob', age: 30, city: 'Los Angeles' }
]
const filterVal = ['name', 'age']
const header = ['Name', 'Age']
exportExcel(data, filterVal, header, 'users.xlsx')
日志
1.0.5 增加 exportExcel