小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
JavaScript 中的工具函数
在实际工作中, 我们因为业务需求不同, 不得不经常找轮子, 这样既浪费时间, 而且有时候又找不到合适的轮子. 而我们自己也会有经常造轮子, 不过由于工作忙的原因, 没有总结出来, 就造成了经常找轮子造轮子的循环往复..
这里总结分享一些在工作中造轮子的小积累:
- 获取 JS 数据类型
/**
* 获取 JS 基本数据类型, 返回小写字母开头
* @param data
* @returns {string} Function | Array | String | Number | Undefined | Null...
*/
const getType = (data: any) => {
const type = Object.prototype.toString.call(data).split(' ')[1]
return type.substring(0, type.length - 1).toLowerCase()
}
2. 几个常用的正则表达式
const regexp = {
number: /^[0-9]*$/,
text: /^[0-9a-zA-Z\u4e00-\u9fa5\s]*$/,
mailSuffix: /@[0-9a-z]+\.[0-9a-z]+$/,
email: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/,
chinaMobilePhone:
/^(\+)?(0|86|17951)?(13[0-9]||14[57]||15[012356789]||16[6]||17[678]||18[0-9]||19[89])[0-9]{8}$/,
}
3. 数组排序
one-line, unreadable quick sort implementation
const qs = (l) =>
l.length > 0
? (([p, ...t]) => [...qs(t.filter((x) => x < p)), p, ...qs(t.filter((x) => x >= p))])(l)
: []
function arraySort(array) {
let arr = [...array],
res = []
while (arr.length) {
let index = (Math.random() * arr.length) >> 0
res[arr.length - 1] = arr[index]
arr.splice(index, 1)
}
return res
}
4. 随机更改数组元素顺序,混淆数组
// 建议数组混淆
function shuffle(arr) {
const newArr = [...arr]
for (let i = 0; i < newArr.length; i += 1) {
const random = Math.floor(Math.random() * (i + 1))
;[newArr[i], newArr[random]] = [newArr[random], newArr[i]]
}
return newArr
}
const randomSortArr = (arr) => arr.slice().sort(() => Math.random() - 0.5)
console.log(randomSortArr(arr))
/*
let a = (arr) => arr.slice().sort(() => Math.random() - 0.5);
let b = a([1,2,3,4,5]);
console.log(b);