@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 深拷贝,支持常见类型
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 获取操作系统类型
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 获取浏览器类型和版本
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 随机生成颜色
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;}复制代码