常用,好用的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;
}

posted @ 2020-02-19 09:44  =.=  阅读(257)  评论(0编辑  收藏  举报