150 lines
3.9 KiB
JavaScript
150 lines
3.9 KiB
JavaScript
|
||
/**
|
||
* @description: 深复制对象, 利用JSON序列化实现一个深拷贝,继承的属性会丢失
|
||
* @param {Object} 必选
|
||
* @return: {Object} 返回复制的新对象
|
||
*/
|
||
export function deepCloneByJson (obj) {
|
||
if (typeof obj === 'object') {
|
||
return JSON.parse(JSON.stringify(obj))
|
||
} else {
|
||
return obj
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @description: 筛选table数据
|
||
* @param {Object} 必填
|
||
* @return: {Object} 返回筛选后的新对象
|
||
*/
|
||
export function fliterTableData (val) {
|
||
let data = deepCloneByJson(val)
|
||
if (data) {
|
||
return [
|
||
data.label
|
||
]
|
||
}
|
||
return []
|
||
}
|
||
|
||
// 根据路径获取数组
|
||
/**
|
||
* @description: 根据字符串路径获取对象层级下的数据,eg: getValueByPath({a:{b:{c:123}}}, 'a.b.c') => 123
|
||
* @param {Object} 需要获取数据的对象
|
||
* @param {String} 对应的key路径,eg:'a.b.c'
|
||
* @return: 返回对象对应路径下的值
|
||
*/
|
||
export function getValueByPath (object, prop) {
|
||
prop = prop || ''
|
||
let paths = prop.split('.')
|
||
let current = object
|
||
let result = null
|
||
for (let i = 0, j = paths.length; i < j; i++) {
|
||
let path = paths[i]
|
||
if (!current) break
|
||
|
||
if (i === j - 1) {
|
||
result = current[path]
|
||
break
|
||
}
|
||
current = current[path]
|
||
}
|
||
return result
|
||
}
|
||
/**
|
||
* @description: 数组去重
|
||
* @param {Array} 必选,需要去重的数组
|
||
* @param {Boolean} 可选,默认true, 当false时,表示数组内的对象key/value相同时,则为相同
|
||
* @return: 返回去重后的数组
|
||
*/
|
||
export function unique (array, isStrict = true) {
|
||
if (!(array instanceof Array)) { // 输入非数组,返回[]
|
||
return []
|
||
}
|
||
let newArray = [...new Set(array)]
|
||
if (!isStrict) {
|
||
let n = []
|
||
for (let i = 0, len = newArray.length; i < len; i++) {
|
||
if (typeof newArray[i] === 'object') {
|
||
let str = JSON.stringify(newArray[i])
|
||
let isEqual = n.filter(item => {
|
||
return JSON.stringify(item) === str
|
||
}).length
|
||
if (!isEqual) {
|
||
n.push(newArray[i])
|
||
}
|
||
} else {
|
||
n.push(newArray[i])
|
||
}
|
||
}
|
||
newArray = n
|
||
}
|
||
return newArray
|
||
}
|
||
|
||
/**
|
||
* @description: 地址栏搜索字符转化为json对象
|
||
* @param {String} 可选,格式为 a=1&b=2&c=3
|
||
* @return: {Object} 返回对象
|
||
*/
|
||
export function searchToJson (search = window.location.search) {
|
||
if (!search || !(typeof search === 'string')) { // 输入非字符串,返回undefined
|
||
return undefined
|
||
} else {
|
||
let index = search.indexOf('?')
|
||
search = index > -1 ? search.substr(index + 1) : search // 存在问号,则删除
|
||
let searchJson = {}
|
||
let searchArr = search.split('&')
|
||
for (let i = 0, len = searchArr.length; i < len; i++) {
|
||
let tempArr = searchArr[i].split('=')
|
||
if (tempArr.length > 1) {
|
||
searchJson[tempArr[0]] = tempArr[1]
|
||
}
|
||
}
|
||
return searchJson
|
||
}
|
||
}
|
||
/**
|
||
* @description: json对象转化为地址栏搜索字符
|
||
* @param {Object} 必选
|
||
* @return: {String} 返回字符串,格式为 a=1&b=2&c=3
|
||
*/
|
||
export function jsonToSearch (json) {
|
||
if (typeof json !== 'object') { // 输入非字符串,返回undefined
|
||
return ''
|
||
} else {
|
||
let str = ''
|
||
for (let i in json) {
|
||
str += i + '=' + json[i] + '&'
|
||
}
|
||
if (str) {
|
||
str = str.substr(0, str.length - 1)
|
||
}
|
||
return str
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @description: 首字符为字母,则返回首字母大写的字符串
|
||
* @param {String} 必选
|
||
* @return: {String} 返回转化后的字符串
|
||
*/
|
||
export function firstLetterUppercase (str) {
|
||
if (!str || typeof str !== 'string') {
|
||
return str
|
||
}
|
||
return str.toLocaleUpperCase().slice(0, 1) + str.slice(1)
|
||
}
|
||
|
||
/**
|
||
* @description: 若字符串存在字母,则返回首字母大写,其余小写的字符串
|
||
* @param {String} 必选
|
||
* @return: {String} 返回转化后的字符串
|
||
*/
|
||
export function onlyFirstLetterUppercase (str) {
|
||
if (!str || typeof str !== 'string') {
|
||
return str
|
||
}
|
||
return str.toLocaleUpperCase().slice(0, 1) + str.toLocaleLowerCase().slice(1)
|
||
}
|