博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
封装的前端常用工具函数
阅读量:7093 次
发布时间:2019-06-28

本文共 6409 字,大约阅读时间需要 21 分钟。

@desc 树状数据结构

// 使用示例代码:list: [{id: 1, pid: 0, name: 11}, {id: 2, pid: 1, name: 2}]getTreeArr({ key: 'id', pKey: 'pid', data: list })result: [    {id: 1, pid: 0, name: 11, children: [        {id: 2, pid: 1, name: 2}    ]}] *//** * 将一级的数据结构处理成树状数据结构 * @param {Object} obj {key, pKey, data} *  @param obj.key  字段名称 比如id *  @param obj.pKey 父字段名称 比如 pid *  @param obj.rootPValue 根节点的父字段的值 *  @param obj.data 需要处理的数据 *  @param obj.jsonData 是否深复制数据(默认是true) * @return {Array} arr   */ function getTreeArr(obj) {    if (!Array.isArray(obj.data)) {      console.log('getTreeArr=>请传入数组')      return []    }    obj.jsonData = obj.jsonData === false ? obj.jsonData : true    const arr = obj.jsonData ? JSON.parse(JSON.stringify(obj.data)) : obj.data    const arr1 = []    // 将数据处理成数状结构    arr.forEach(item => {      let index = 0      item.children = []      arr.forEach(item1 => {        // 得到树结构关系        if (item[obj.key] === item1[obj.pKey]) {          item.children.push(item1)        }        // 判断根节点        if (item1[obj.key] !== item[obj.pKey]) {          index++        }      })      // 没传入根节点,根据当前数据结构得到根节点      if (!('rootPValue' in obj) && index === arr.length) {        arr1.push(item)      }    })    // 传入根节点,根据传入的根节点组成树结构    if ('rootPValue' in obj) {      arr.forEach(item => {        if (item[obj.pKey] === obj.rootPValue) {          arr1.push(item)        }      })    }    return arr1  }复制代码

@desc 保留n位小数

function toFixed(val, num) {    val = parseFloat(val);    if (val) {        val = parseFloat(val.toFixed(num || 1));    } else {        val = 0;    }    return val;}复制代码

@desc判断是否是 null, '', undefined

function isNot(val) {    if (val === null || val === '' || val === undefined) {        return true;    } else {        return false;    }}复制代码

@desc设置 本地缓存

function setStorage(key, obj) {   if (typeof obj === 'string') {       localStorage.setItem(key, obj);   } else {       localStorage.setItem(key, JSON.stringify(obj));   }}/*** 获取*/function getStorage(key) {   let val = localStorage.getItem(key);   try {       return JSON.parse(val);   } catch (e) {       return val;   }}/*** 删除, 如果不传值,删除所有*/function clearStorage(key) {   if (key) {       localStorage.removeItem(key);   } else {       localStorage.clear();   }}复制代码

@desc 深拷贝,支持常见类型

  • @param {Any} values
function deepClone(values) {    var copy;    // Handle the 3 simple types, and null or undefined    if (null == values || "object" != typeof values) return values;    // Handle Date    if (values instanceof Date) {        copy = new Date();        copy.setTime(values.getTime());        return copy;    }    // Handle Array    if (values instanceof Array) {        copy = [];        for (var i = 0, len = values.length; i < len; i++) {            copy[i] = deepClone(values[i]);        }        return copy;    }    // Handle Object    if (values instanceof Object) {        copy = {};        for (var attr in values) {            if (values.hasOwnProperty(attr)) copy[attr] = deepClone(values[attr]);        }        return copy;    }    throw new Error("Unable to copy values! Its type isn't supported.");}复制代码

@desc 获取操作系统类型

  • @return {String}
function getOS() {    var userAgent = 'navigator' in window && 'userAgent' in navigator && navigator.userAgent.toLowerCase() || '';    var vendor = 'navigator' in window && 'vendor' in navigator && navigator.vendor.toLowerCase() || '';    var appVersion = 'navigator' in window && 'appVersion' in navigator && navigator.appVersion.toLowerCase() || '';    if (/mac/i.test(appVersion)) return 'MacOSX'    if (/win/i.test(appVersion)) return 'windows'    if (/linux/i.test(appVersion)) return 'linux'    if (/iphone/i.test(userAgent) || /ipad/i.test(userAgent) || /ipod/i.test(userAgent)) 'ios'    if (/android/i.test(userAgent)) return 'android'    if (/win/i.test(appVersion) && /phone/i.test(userAgent)) return 'windowsPhone'}复制代码

@desc 获取浏览器类型和版本

  • @return {String}
function getExplore() {    var sys = {},        ua = navigator.userAgent.toLowerCase(),        s;    (s = ua.match(/rv:([\d.]+)\) like gecko/)) ? sys.ie = s[1]:        (s = ua.match(/msie ([\d\.]+)/)) ? sys.ie = s[1] :        (s = ua.match(/edge\/([\d\.]+)/)) ? sys.edge = s[1] :        (s = ua.match(/firefox\/([\d\.]+)/)) ? sys.firefox = s[1] :        (s = ua.match(/(?:opera|opr).([\d\.]+)/)) ? sys.opera = s[1] :        (s = ua.match(/chrome\/([\d\.]+)/)) ? sys.chrome = s[1] :        (s = ua.match(/version\/([\d\.]+).*safari/)) ? sys.safari = s[1] : 0;    // 根据关系进行判断    if (sys.ie) return ('IE: ' + sys.ie)    if (sys.edge) return ('EDGE: ' + sys.edge)    if (sys.firefox) return ('Firefox: ' + sys.firefox)    if (sys.chrome) return ('Chrome: ' + sys.chrome)    if (sys.opera) return ('Opera: ' + sys.opera)    if (sys.safari) return ('Safari: ' + sys.safari)    return 'Unkonwn'}复制代码

@desc url参数转对象

  • @param {String} url default: window.location.href
  • @return {Object}
function parseQueryString(url) {    url = url == null ? window.location.href : url    var search = url.substring(url.lastIndexOf('?') + 1)    if (!search) {        return {}    }    return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}')}复制代码

@desc 随机生成颜色

  • @return {String}
function randomColor() {    return '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).slice(-6);}复制代码

desc 生成指定范围随机数

  • @param {Number} min
  • @param {Number} max
  • @return {Number}
function randomNum(min, max) {    return Math.floor(min + Math.random() * (max - min));}复制代码

@desc 格式化时间

function formatDate(date) {    date = new Date(date);    var y = date.getFullYear();    var m = date.getMonth() + 1;    var d = date.getDate();    var h = date.getHours();    var m1 = date.getMinutes();    var s = date.getSeconds();    m = m < 10 ? ("0" + m) : m;    d = d < 10 ? ("0" + d) : d;    return y + "-" + m + "-" + d + " " + h + ":" + m1 + ":" + s;}复制代码

@desc 获取当前时间

function getNowFormatDate() {    var date = new Date();    var seperator1 = '/';    var seperator2 = ':';    var month = date.getMonth() + 1;    var strDate = date.getDate();    if (month >= 1 && month <= 9) {        month = '0' + month;    }    if (strDate >= 0 && strDate <= 9) {        strDate = '0' + strDate;    }    var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate +        " " + date.getHours() + seperator2 + date.getMinutes() +        seperator2 + date.getSeconds();    return currentdate;}复制代码

转载地址:http://tpsql.baihongyu.com/

你可能感兴趣的文章
使用shell脚本实现加法乘法运算
查看>>
jQuery插件开发1:分页条
查看>>
pycharm调试edx环境搭建
查看>>
11.10/11.11/11.12 安装PHP5 11.13 安装PHP7
查看>>
HQL:实用技术
查看>>
css基本使用
查看>>
使用canvas画圆
查看>>
基础设施ddos防御
查看>>
Django之分页功能实例
查看>>
【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像
查看>>
zookeeper集群的安装和配置
查看>>
tomcat学习笔记之默认连接器
查看>>
基于UDP的服务器和客户端之间的通信
查看>>
Confluence的安装
查看>>
JSPatch的应用
查看>>
[spring/resource/applicationContext-system.xml]: Invocation of init method failed; nested exception
查看>>
Bloom-Filter布隆过滤器
查看>>
磁盘管理二(LVM及磁盘配额)
查看>>
PowerShell DSC(二)拆分配置信息
查看>>
c++ 广义表
查看>>