常用,好用的js代码(二)
常用,好用的js代码
随机打乱数组
function shuffle(arr) {
return arr.sort(() => Math.random() - 0.5);
}
随机打乱数组进阶
使用
Fisher–Yates
算法实现数组乱序。这个算法其实非常的简单,就是将数组从后向前遍历,然后将当前元素与随机位置的元素进行交换。
function shuffle(arr) {
let m = arr.length;
while (m > 1){
let index = Math.floor(Math.random() * m--);
[arr[m] , arr[index]] = [arr[index] , arr[m]]
}
return arr;
}
生成uuid
想要了解更多
uuid
的知识 ,可以查看这篇文章传送门
这种基于随机数生成的uuid,重复率是个问题,大型长期的项目不建议使用。
function uuid(){
let s = [];
let hexDigits = '0123456789abcdef';
for(let i=0;i<36;i++){
s[i] = hexDigits.substr(Math.Floor(Math.random() * 0x10),1);
}
s[14] = '4'; // 4表示版本号,目前只有5个版本
s[19] = hexDigits.substr((s[19]&0x3)|0x8,1); // 这里只会出现 a,b,8,9 4种情况
s[8]=s[13]=s[18]=s[23] = '-';
let id = s.join('');
return id;
}
获取dom下出现次数最多的标签
let dom = [...document.getElementsByTagName('*')].map(item=>item.nodeName);
let domObj = dom.reduce((obj,a)=>{
obj[a] = obj[a]?obj[a]+1:1;
return obj;
},{});
// 排序拿到最多次数的标签
let arr = Object.entries(domObj);
arr.sort((a,b)=>b[1]-a[1]);
16进制颜色转RGB\RGBA字符串
function colorToRGB(val,opa){
let pattern = /^(#?)[a-fA-F0-9]{6}$/; //16进制颜色值校验规则
let isOpa = typeof opa == 'number'; //判断是否有设置不透明度
if (!pattern.test(val)) { //如果值不符合规则返回空字符
return '';
}
let v = val.replace(/#/, ''); //如果有#号先去除#号
let rgbArr = [], rgbStr = '';
for (let i = 0; i < 3; i++) {
let item = v.substring(i * 2, i * 2 + 2);
let num = parseInt(item, 16);
rgbArr.push(num);
}
rgbStr = rgbArr.join();
rgbStr = 'rgb' + (isOpa ? 'a' : '') + '(' + rgbStr + (isOpa ? ',' + opa : '') + ')';
return rgbStr;
}