@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;
}
复制代码