1.时间格式的转换
/*
fmt:yyyy-MM-dd hh:mm:ss 的自由组合
date: Date格式的时间
*/
function dateFtt(fmt, date) {
const o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
'S': date.getMilliseconds() // 毫秒
}
if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) }
for (const k in o) {
if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }
}
return fmt
}
2.数字千分位逗号
function changeNum(num) {
return String(num).replace(/(\d)(?=(\d{3})+$)/g, "$1,");
}
3.数组去重
let arr = [1,2,3,4,1,2,3,5,6,7,8]
// 方法1:set加拓展运算符
let arr1 = [...new Set(arr)]
// 方法2:Set
let arr2 = Array.from(new Set(arr))
// 方法3:indexof 或 includes
const unique1 = arr => {
let array = []
for(let i = 0; i < arr.length; i++) {
// if (array.indexOf(arr[i]) === -1) {
if (!array.includes(arr[i])) {
array.push(arr[i])
}
}
return array;
}
let arr3 = unique1(arr)
// 方法4:filter
const unique2 = arr => {
return arr.filter((item, index) => {
// 查找第一个元素与当前的索引匹配
return arr.indexOf(item) === index
})
}
let arr4 = unique2(arr);
// 方法5:Map
const unique3 = arr => {
let map = new Map()
let array = []
for(var i = 0; i < arr.length; i++) {
if(!map.has(arr[i])) {
map.set(arr[i], true)
array.push(arr[i])
}
}
return array;
}
let arr5 = unique3(arr);
4. 数组扁平化
所谓扁平化就是将一个多维数组转为一个一维数组;[1,2,[3,4,[5,6]]] => [1,2,3,4,5,6]
let arr = [1,[2,3,[4,5]]]
// 方法1: flat函数
let arr1 = arr.flat(Infinity)
// 方法2: 正则
let arr2 = JSON.parse("[" + JSON.stringify(arr).replace(/\[|\]/g, "") + "]")
// 方法3: reduce
const flatten = arr => {
return arr.reduce((total, cur) => {
return total.concat(Array.isArray(cur) ? flatten(cur) : cur)
}, [])
}
let arr3 = flatten(arr)
// 方法4: 循环递归
let arr4 = []
const flatten1 = arr => {
for(let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
flatten1(arr[i])
} else {
arr4.push(arr[i])
}
}
}
flatten1(arr);
5.伪数组转为真数组
const lis = document.getElementsByTagName("li") // 伪数组
// 方法1: es6
const arrLis1 = Array.from(lis)
// 方法2: es5
const arrLis2 = Array.prototype.slice.call(lis)
6.判断是移动端还是PC端
function isPC() {
var userAgentInfo = navigator.userAgent
var Agent = ['Android','iPhoone','SymbianOS','Windows Phone','iPad','iPod']
var flag = true
for(var v = 0; v < Agent.length; v++) {
if(userAgentInfo.indexOf(Agent[v]) > 0) {
flag = false
break
}
}
return flag
}
7.判断是否在微信打开
function isWeChat() {
var userAgentInfo = navigator.userAgent
if(userAgentInfo.indexOf('micromessenger') != -1) {
return true
} else {
return false
}
}
8.防抖
限制执行次数,多次密集的触发只执行一次 场景:搜索框输入
function debounce(callback, delay) {
let timer
return function() {
if (timer) clearTimeout(timer)
timer= setTimeout(() => {
callback.apply(this, arguments)
}, delay)
}
}
9.节流
限制执行频率,有节奏地执行 场景:drag、scroll事件触发
function throttle(callback, delay) {
let timer
return function() {
if (timer) return
setTimeout(() => {
callback.apply(this, arguments)
clearTimeout(timer)
}, delay)
}
}
10.找到字符串中出现最多的字符,并统计个数
let str = 'aghaosbasldskdpqashdaognkdalqjgoddjddjdjdjdjjdjajapaaagaggk'
let obj = {}
for(let i=0;i<str.length;i++) {
if(!obj[str.charAt(i)]) {
obj[str.charAt(i)] = 1
} else {
obj[str.charAt(i)]++
}
}
let max = 0
let maxcode = ''
for(var key in obj) {
if(obj[key] > max) {
max = obj[key]
maxcode = key
}
}
console.log(maxcode,max) //a 12
11.下划线命名转为小驼峰命名
function toCamel(str) {
// 使用split件str拆分成数组
if(str.split('_').length === 1) return
//使用reduce累加器对数据进行累加,并将索引大于0的元素首字母大写
//substr(index,index) 截取字符串中指定索引的字符集
let newStr = str.split('_').reduce((a,b)=>{
return a+b.substr(0,1).toUpperCase() + b.substr(1)
})
return newStr
}
12.uuid()
function uuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
const r = (Math.random() * 16) || 0;
const v = c === 'x' ? r : (r && 0x3) || 0x8;
return v.toString(16);
});
}
12.数字转换中文(如1,2,12转一,二,十二)
function convertToChineseNumber(num) {
const units = ['', '十', '百', '千', '万', '亿'];
const chineseNumbers = {
0: '零',
1: '一',
2: '二',
3: '三',
4: '四',
5: '五',
6: '六',
7: '七',
8: '八',
9: '九'
};
let result = '';
const numStr = num.toString();
const len = numStr.length;
for (let i = 0; i < len; i++) {
const digit = parseInt(numStr[i]);
const unit = units[len - i - 1];
if (digit === 0) {
if (unit === '万' || unit === '亿') {
result += chineseNumbers[0] + unit;
}
} else {
result += chineseNumbers[digit] + unit;
}
}
if (len === 2 && num < 20) {
result = result.substring(1)
}
return result;
}