1. 前言
1.整理一下 自己平常工作中用到的一些JS工具
2. 随机色
2.1 rgb
的形式
当然也可以使用
rgba
const randomColor = ()=> {
var r = randomNumber(0, 255);
var g = randomNumber(0, 255);
var b = randomNumber(0, 255);
return `rgb(${r},${g},${b})`;
}
2.2 十六进制颜色
颜色嘛 英文穷举不合适 ,那就 十六进制随机数
const randomColor = ()=>{
return "#" + Math.floor(Math.random()* 0xffffff).toString()
}
3. RGB转为 HEX
const rgbToHex = (r,g,b)=>{
const toHex = num=>{
const hex = num.toString(16)
return hex.length === 1 ? `0${hex}` :hex
}
return `#${toHex(r)}${toHex(g)}${toHex(b)}`
}
4.日期格式化 -1
const formatNumber = n => {
n = n.toString()
return n[1] ? n : `0${n}`
}
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
}
根据自己的需求灵活变化就行
4.2 时间格式化 -2
export function formatDate (date, fmt) {
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
}
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
}
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
let str = o[k] + ''
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
}
}
return fmt
}
function padLeftZero (str) {
return ('00' + str).substr(str.length)
}
4.3 时间格式化无符号拼接
export function nosignDateTime (date) {
var datetime = transferDateTime(date)
datetime = datetime.replace(/:/g, '').replace(/-/g, '').replace(/ /g, '')
datetime = parseInt(datetime)
return datetime
}
5. 返回最小日期
const getMinDate = dates => {
if (!dates) {
throw new Error('参数类型不匹配!')
}
if (!dates.length) {
return dates
}
return new Date(Math.min.apply(null, dates)).toISOString()
}
参数是日期数组
6. 判断yyyy-MM-dd hh:mm:ss格式
正则表达式
export function validateDateTime (testdate) {
var dateRegex = /((19|20)[0-9]{2})-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) ([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/
var res = dateRegex.test(testdate)
if (res) {
var ymd = testdate.match(/(\d{4})-(\d+)-(\d+).*/)
var year = parseInt(ymd[1])
var month = parseInt(ymd[2])
var day = parseInt(ymd[3])
if (day > 28) {
// 获取当月的最后一天
var lastDay = new Date(year, month, 0).getDate()
return (lastDay >= day)
}
return true
}
return false
}
7. 比较时间大小
compareTime(beginTime, endTime) {
var beginTimes = beginTime.replace(/-/g, "/");
var endTimes = endTime.replace(/-/g, "/");
var a = (Date.parse(endTimes) - Date.parse(beginTimes)) / 3600 / 1000;
if (a < 0) {
console.log("endTime小!");
} else if (a > 0) {
console.log("endTime大!");
} else if (a == 0) {
console.log("相等!");
}
return a;
},
8.数字补0
const formatNumber = n => {
n = n.toString()
return n[1] ? n : `0${n}`
}
padStart
// '010'
"10".padStart(3,0)
//'10a'
"10".padEnd(3,"a")
参数1: 字符串长度
参数2: 字符串长度不够用 指定字符进行补充
padEnd
末尾补充
9.数组去重
const quChong = (arr)=>{
return [...new Set(arr)]
}
10. 数组打乱顺序
const disorderArr = array => {
if (!Array.isArray(array)) {
throw new Error('参数不匹配')
}
let end = array.length
if (!end) {
return array
}
while (end) {
let start = Math.floor(Math.random() * end--)
;[array[start], array[end]] = [array[end], array[start]]
}
return array
}
参数:数组类型的数组
10.2 数组打乱顺序 -简洁
let arr = [32,6,4,'',true,'666',false,'2022年5月30号']
arr = arr.sort(()=>0.5-Math.random())
- 数组自带的排序
- 随机数
11. 查找在数组中的位置
/**
*
* @param arr
* @param str 查找在数组中的位置
* @returns {number}
*/
arrayIndexOf =(arr, str)=> {
// 如果可以的话,调用原生方法
if (arr && arr.indexOf) {
return arr.indexOf(str);
}
var len = arr.length;
for (var i = 0; i < len; i++) {
// 定位该元素位置
if (arr[i] == str) {
return i;
}
}
// 数组中不存在该元素
return -1;
}
12. 数组随机生产一个值
let arr = [32,6,4,'',true,'666',false,'2022年5月30号']
const randomElement = (arr)=>arr[Math.floor(Math.random()*arr.length)]
randomElement(arr)
13. 文件尺寸格式化
const formatSize = size => {
if (typeof +size !== 'number') {
throw new Error('参数不对 !')
}
const unitsHash = 'B,KB,MB,GB'.split(',')
let index = 0
while (size > 1024 && index < unitsHash.length) {
size /= 1024
index++
}
return Math.round(size * 100) / 100 + unitsHash[index]
}
formatSize('10240') // 10KB
formatSize('10240000') // 9.77MB
14.连字符转驼峰
const toCamelCase = (str = '', separator = '-') => {
if (typeof str !== 'string') {
throw new Error('参数类型不对')
}
if (str === '') {
return str
}
const newExp = new RegExp('\\-\(\\w\)', 'g')
return str.replace(newExp, (matched, $1) => {
return $1.toUpperCase()
})
}
toCamelCase('java-script')//javaScript'
15.驼峰转连字符
const fromCamelCase = (str = '', separator = '-') => {
if (typeof str !== 'string') {
throw new Error('参数类型不对')
}
if (str === '') {
return str
}
return str.replace(/([A-Z])/g, `${separator}$1`).toLowerCase()
}
fromCamelCase('javaScript') // java-script
16. 深浅拷贝
- js深浅拷贝
17. Unicode转中文
export function unicodeToChinese (str) {
return unescape(str.replace(//g, '%u').replace(/;/g, ''))
}
18. 浏览器高度
const clientHeight = ()=> {
return window.innerHeight || document.documentElement.clientHeight;
}
19.上滚动距离 文档滚动的高度
const getScroTop = ()=> {
return document.documentElement.scrollTop;
}
20. 元素距离顶部距离
const getoffsetTop = ele=> {
var top = 0;
while (true) {
top = top + ele.offsetTop + ele.offsetParent.clientTop;
ele = ele.offsetParent;
// ele是body 的时候 ,就到顶了
if (ele.offsetParent == null) {
break;
}
}
return top;
}
21. 手机号中间四位 变为*
也就是脱敏处理
let phone = "186929398753"
//186****8753
phone.toString().replace(/^(\d{3})\d{4}(\d{4})$/ ,'$1****$2')
22. 校验数据类型
const typeOf = (obj) =>{
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
}
typeOf('yzs') // string
typeOf([]) // array
typeOf(new Date()) // date
typeOf(null) // null
typeOf(true) // boolean
typeOf(() => { }) // function
23. 阿拉伯数字转中文数字
const numToChinese = (num) =>{
if (!/^\d*(\.\d*)?$/.test(num)) {
alert("Number is wrong!");
return "Number is wrong!";
}
var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
var BB = new Array("", "十", "百", "千", "万", "亿", "点", "");
var a = ("" + num).replace(/(^0*)/g, "").split("."),
k = 0,
re = "";
for (var i = a[0].length - 1; i >= 0; i--) {
switch (k) {
case 0:
re = BB[7] + re;
break;
case 4:
if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
re = BB[4] + re;
break;
case 8:
re = BB[5] + re;
BB[7] = BB[5];
k = 0;
break;
}
if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re;
if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
k++;
}
if (a.length > 1) //加上小数部分(如果有小数部分)
{
re += BB[6];
for (var i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
}
return re;
};
参考资料
部分代码是在网上搜索,根据我自己的开发需求进行了修改,但是时间久了也忘记在哪看的,如有侵权,请告知 我会删除