1.从URL中解析参数
/**
* @param {String} url
* @description 从URL中解析参数
*/
export const getParams = url => {
const keyValueArr = url.split('?')[1].split('&')
let paramObj = {}
keyValueArr.forEach(item => {
const keyValue = item.split('=')
paramObj[keyValue[0]] = keyValue[1]
})
return paramObj
}
2.树形结构,根据id 查找 data中的某一项
export const getChidlren = (id, data) => {
let hasFound = false, // 表示是否有找到id值
result = null
let fn = function (data) {
if (Array.isArray(data) && !hasFound) { // 判断是否是数组并且没有的情况下,
data.forEach(item => {
if (item.id === id) { // 数据循环每个子项,并且判断子项下边是否有id值
result = item
hasFound = true
} else if (item.children) {
fn(item.children)
}
})
}
}
fn(data)
return result
}
3.树形结构,根据id查找当前节点以及所有父节点
/**
* @description 根据id查找当前节点以及所有父节点
* @param {Object} json 需要遍历的JSON对象
* @param {String} child 需要查找的节点名称
* @param {Any} id 需要查找的节点名称对应的值
*/
export const getParentNodeAll = (json, child, id) => {
let stack = []
let going = true
let walker = (json, id) => {
json.forEach(item => {
if (!going) return
stack.push(item[child])
if (item[child] === id) {
going = false
} else if (item['children']) {
walker(item['children'], id)
} else {
stack.pop()
}
})
if (going) stack.pop()
}
walker(json, id)
return stack
}
4.导出文件
/** *
* @description 下载文件
* @param {Blob} blob 文件流
* @param {String} filename 文件名
*/
export const fileDownload = (blob, filename) => {
if (window.navigator && window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, filename)
} else {
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)
downloadElement.href = href
downloadElement.download = filename
document.body.appendChild(downloadElement)
downloadElement.click()
window.URL.revokeObjectURL(href)
}
}
5.文件大小 字节转换单位
/**
* 文件大小 字节转换单位
* @param size
* @returns {string|*}
*/
export const filterSize = (fileSize) => {
console.log(fileSize)
if (fileSize < 1024) {
return fileSize + 'B'
} else if (fileSize < (1024 * 1024)) {
var temp = fileSize / 1024
temp = temp.toFixed(2)
return temp + 'KB'
} else if (fileSize < (1024 * 1024 * 1024)) {
var temp = fileSize / (1024 * 1024)
temp = temp.toFixed(2)
return temp + 'MB'
} else {
var temp = fileSize / (1024 * 1024 * 1024)
temp = temp.toFixed(2)
return temp + 'GB'
}
}
6.获取本地图片的文件信息
export function getImageFileFromUrl(url, imageName) {
// imageName一定要带上后缀
let p = new Promise((resolve, reject) => {
var blob = null
var xhr = new XMLHttpRequest()
xhr.open("GET", url)
xhr.setRequestHeader('Accept', 'image/jpeg')
xhr.responseType = "blob"
xhr.onload = () => {
blob = xhr.response
let imgFile = new File([blob], imageName, {type: 'image/jpeg'})
resolve(imgFile)
}
xhr.send()
})
return p
}
7.当前浏览器名称
export const getExplorer = () => {
const ua = window.navigator.userAgent
const isExplorer = (exp) => {
return ua.indexOf(exp) > -1
}
if (isExplorer('MSIE')) return 'IE'
else if (isExplorer('Firefox')) return 'Firefox'
else if (isExplorer('Chrome')) return 'Chrome'
else if (isExplorer('Opera')) return 'Opera'
else if (isExplorer('Safari')) return 'Safari'
}
8.累加合(兼容浮点数累加)
/**
* @param {Array} number
* @return 累加合(兼容浮点数累加)
*/
export function totalizer(arr) {
const accAdd = (arg1, arg2) => {
let r1
let r2
try {
r1 = arg1.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
}
const m = 10 ** Math.max(r1, r2)
return (arg1 * m + arg2 * m) / m
}
return arr.reduce((pre, cur) => accAdd(pre, cur), 0)
}
9.根据汉字首字母排序
let arr = ["贵州省", "江苏省", "江西省", "浙江省", "四川省", "安徽省", "山东省", "上海", "湖北省", "福建省", "辽宁省", "山西省", "河北省", "青海省",
"黑龙江省", "内蒙古自治区", "北京", "河南省", "湖南省", "广东省", "陕西省", "吉林省", "云南省", "新疆维吾尔自治区",
"重庆", "天津", "甘肃省", "宁夏回族自治区", "海南省", "广西壮族自治区", "西藏自治区"]
let sortArray = arr.sort(function (str1, str2) {
return str1.localeCompare(str2, 'zh')
})