# 其他
其他功能函数集合
# createEnum
- 参数:
{Object} definition 枚举数组
{String} field 要赋值给常量名的字段名
- 返回值:
{Array}
- 说明:创建枚举对象
- 示例:
TIP
数组被该方法包装后,会将常量挂到数组对应的常量名上
const meters = createEnum(
[
{ code: 1, name: '门禁', const: 'MENJIN' },
{ code: 2, name: '停车', const: 'TINGCHE' },
{ code: 3, name: '监控', const: 'JIANKONG' }
],
'code'
)
console.log(meters.MENJIN) // 1
console.log(meters)
/* 输出:
[
{
"code": 1,
"name": "门禁"
},
{
"code": 2,
"name": "停车"
},
{
"code": 3,
"name": "监控"
}
]
*/
# getRandomString
- 参数:
{Number} length 长度
{Boolean} isPureNumber 是否仅包含数字
- 返回值:
{String}
- 说明:获取指定长度的随机字符串
- 示例:
getRandomString(32) // R_65HwlQk0t69elzcJ8o5a9RxJjWm5vq5A
getRandomString(32, true) // 15679008947220468022363554452145
# getRandomRangeNumber
- 参数:
{Number} min 最小值
{Number} max 最大值
- 返回值:
{Number}
- 说明:获取指定数字范围内的随机数字
- 示例:
getRandomRangeNumber(100, 10000) // 8343.857252274678
# getRandomColor
- 参数:
无
- 返回值:
{String}
- 说明:生成随机 16 进制的颜色
- 示例:
getRandomColor() // #27a574
# throttle
- 参数:
{Function} func 执行的函数
{Number} delay 节流时间(单位:毫秒)
- 返回值:
无
- 说明:函数节流(执行第一个)
WARNING
不允许传入匿名函数,否则无效
- 示例:
function speak() {
console.log('hello, world')
}
function mount() {
throttle(speak, 500)
}
mount() // 输出: hello, world
mount() // 不输出
mount() // 不输出
# debounce
- 参数:
{Function} func 执行的函数
{Number} delay 防抖时间(单位:毫秒)
- 返回值:
无
- 说明:函数防抖(执行最后一个)
WARNING
不允许传入匿名函数,否则无效
- 示例:
function speak() {
console.log('hello, world')
}
function mount() {
debounce(speak, 500)
}
mount() // 不输出
mount() // 不输出
mount() // 输出: hello, world
# sleep
- 参数:
{Number} duration
- 返回值:
{Promise}
- 说明:程序睡眠一定时间后继续执行,此函数为异步函数
- 示例:
console.log('start')
await sleep(3) // 睡眠 3 秒
console.log('end')
# decodeValue
- 参数:
{String} value
- 返回值:
{String}
- 说明:解码被编码的字符串
- 示例:
decodeValue('我') // 我
decodeValue('%E6%88%91') // 我
decodeValue('%u6211') // 我
# copyToClipboard
- 参数:
{String} value
- 返回值:
{Promise}
- 说明:复制指定的内容到剪贴板
- 示例:
copyToClipboard('我爱我的祖国').then(() => {
alert('复制成功')
})
# nest2Flat
- 参数:
{Object} data 嵌套对象数据
{Object} keys 配置键名
{String} pathProp 用于描述路径的属性(该属性必须存在于对象上)
// 默认 keys: { id: 'id', // 数据 id pid: 'parentId', // 数据父 id children: 'children' // 子节点名 }
- 返回值:
{Array}
- 说明:将嵌套结构数据转成父子关系的数组
- 示例:
const data = {
id: 1,
children: [
{
id: 2,
children: [{ id: 3 }, { id: 4 }]
}
]
}
nest2Flat(data)[
// 返回:
({ id: 3, parentId: 2 }, { id: 4, parentId: 2 }, { id: 2, parentId: 1 }, { id: 1 })
]
# flat2Nest
- 参数:
{Array<Object>} data 父子关系数组
{Object} keys 配置键名
// 默认 keys: { id: 'id', // 数据 id pid: 'parentId', // 数据父 id children: 'children' // 子节点名 }
- 返回值:
{Object}
- 说明:将含有父子 ID 关系的数组转成嵌套结构
- 示例:
const data = [{ id: 3, parentId: 2 }, { id: 4, parentId: 2 }, { id: 2, parentId: 1 }, { id: 1 }]
flat2Nest(data)[
// 返回:
{
id: 1,
children: [
{
id: 2,
parentId: 1,
children: [
{
id: 3,
parentId: 2,
_signature: 'R_w8ChcE03AFh7FqX4V8uLz0YXCuaA25U5',
_isLeaf: true
},
{
id: 4,
parentId: 2,
_signature: 'R_lZ1RFwuKe7mW4HgXeIiyaGuCxE13TH7A',
_isLeaf: true
}
],
_signature: 'R_vDtv1T4ihY10AiXw2Xo3XIN5iQilg705',
_isLeaf: false
}
],
_signature: 'R_NNx0qaEuR4jI9tAqKRvgi209cXE15d3c',
_isLeaf: false
}
]
# getCodeMapName
- 参数:
{String | Number} code 枚举值
{Array<Object>} codeMap 枚举数组
{Object} keys 枚举对应的键
// 默认键名:
{
name: 'name',
code: 'code'
}
- 返回值:
{String}
- 说明:获取枚举数组中的 code 对应的 name
- 示例:
getCodeMapName(1, [
{ code: 1, name: '苹果' },
{ code: 2, name: '梨子' }
]) // 苹果
# deepClone
- 参数:
{Object | Array} value
- 返回值:
{Object | Array}
- 说明:深度克隆对象
- 示例:
const a = { name: 'alex' }
const b = deepClone(a)
console.log(b) // 输出 { name: 'alex' }
a === b // false
# cleanPureArray
- 参数:
{Array<String | Number | Boolean | Null | Undefined>} arr
- 返回值:
{Array}
- 说明:基本数据类型的数组去重
- 示例:
cleanPureArray([1, 2, 3, 3, 4, 1, true, true, null, null, undefined, undefined])
// [1, 2, 3, 4, true, null, undefined]
# cleanObjectArray
- 参数:
{Array<Object>} arr
{String} key 依赖的键名
- 返回值:
{Array<Object>}
- 说明:对象类型的数组去重
- 示例:
const arr = [
{ name: 'alex', age: 18 },
{ name: 'alex', age: 25 },
{ name: 'jack', age: 25 }
]
cleanObjectArray(arr, 'name') // [{ name: 'alex', age: 18 }, { name: 'jack', age: 25 }]
cleanObjectArray(arr, 'age') // [{ name: 'alex', age: 18 }, { name: 'alex', age: 25 }]
# flatDeepArray
- 参数:
{Array<Any>} arr 多维数组
- 返回值:
{Array<Any>}
- 说明:将深层多维数组转成一维数组,等价于 Array.prototype.flat
- 示例:
flatDeepArray([1, 2, [1, 3, 4, [5, 8], [0, 10, [{ a: 10, b: null }]]]]) // [1, 2, 1, 3, 4, 5, 8, 0, 10, { a: 10, b: null }]
# filterXSSCharacters
- 参数:
{String} value
- 返回值:
{String}
- 说明:过滤 XSS 危险的脚本字符
- 示例:
const str = '<script>alert(3)</script>'
filterXSSCharacters(str) // lt;scriptgt;alert(3)lt;scriptgt;
# filterRichtextTags
- 参数:
{String} value
- 返回值:
{String}
- 说明:过滤富文本字符串中的标签
- 示例:
const str = '<script>alert(3)</script>'
filterRichtextTags(str) // alert(3)
# openWindow
- 参数:
{String} url 地址
{String} title 标题
{Number} width 宽度
{Number} height 高度
- 返回值:
无
- 说明:打开无工具栏的新窗口
- 示例:
openWindow('http://www.baidu.com/', '百度', 400, 200)
# watchChange
- 参数:
{Object} obj 监听的对象
{Function} callback 回调函数
{String} prop 变动的属性名
{String} action get 或 set
{Any} newValue 新值
{Any} oldValue 旧值
- 返回值:
无
- 说明:监控对象的变化
- 示例:
const obj = {
a: 10,
b: 20
}
watchChange(obj, () => {
console.log('obj 发生变化了')
})
obj.a = 1000
# tryCatch
- 参数:
{Promise} promise Promise 对象
- 返回值:
{Array} [err, res]
- 说明:对 async 函数的调用进行包装,简化 try catch 处理异常
- 示例:
async function getNodes() {
//....
}
// 不使用 tryCatch 函数
try {
await getNodes()
} catch (e) {
console.log(e)
}
// 使用 tryCatch 函数
const [err, res] = await tryCatch(getNodes())
if (err) {
console.log(err)
}
# asyncLoadLib
- 参数:
{Array|String} urls 要加载的库的路径
{String} sign 加载的唯一标识
- 返回值:
无
- 说明:异步加载需要的库
- 示例:
asyncLoadLib(
[
'https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js',
'https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.css'
],
'tinymce'
).then(() => {
console.log('加载成功')
})
# deepTrim
- 参数:
{Any} obj 要 trim 的对象
- 返回值:
{Any} trim 后的对象
- 说明:深度移除字符串空格
- 示例:
deepTrim({ name: 'a ge', { age: ' name ' }}) // 输出: { name: 'age', { age: 'name' }}
# compareVersion
- 参数:
{String} v1 版本号 1
{String} v2 版本号 2
- 返回值:{Number}
- -1 表示 v1 小于 v2
- 1 表示 v1 大于 v2
- 0 表示 v1 与 v2 相等
- 说明:比较两个版本号的大小,支持比较不同风格的版本号
- 示例:
compareVersion('2.3.5', '4.78.1') // 输出: -1
compareVersion('7.0.1', '7.0.0') // 输出: 1
compareVersion('7.0.0', '7.0') // 输出: 0
compareVersion('9.7.18', '10.2') // 输出: -1
# upperCaseFirst
- 参数:
{String} input 字符串
- 返回值:
{String} 首字母大写后的字符串
- 说明:获取首字母大写字符串
- 示例:
upperCaseFirst('abc') // 输出: Abc