Files
chaoyangpc/static/js/tool.js
2019-10-06 22:48:06 +08:00

103 lines
2.3 KiB
JavaScript

/* eslint-disable no-unused-expressions */
// 使用递归遍历所有属性判断是否 在对象里面匹配到值 借鉴js对象深拷贝的方式
function loopObj (searkey, obj) {
let bool = false
let loop = (searkey, obj) => {
for (let key in obj) {
if (
String(obj[key])
.trim()
.indexOf(searkey) !== -1
) {
bool = true
}
if (typeof obj[key] === 'object' && obj[key] !== null) {
loop(searkey, obj[key])
}
}
}
loop(searkey, obj)
return bool
}
let tool = {
/**
* 搜索函数
* @param {*} arr 搜索目标
* @param {*} str 搜索参数
*/
setSearch: function (arr, str) {
let arrTrueList = [] // 匹配的数据
let arrFalseList = [] // 不匹配数据
arr.forEach(item => {
// 判断输入值key 是否存在对象数组上面
if (loopObj(str, item)) {
arrTrueList.push(item)
} else {
arrFalseList.push(item)
}
})
return arrTrueList
},
/**
* 筛选函数
* @param {*} array 筛选参数
* @param {*} filters 筛选目标
*/
multiFilter: function (array, filters) {
const filterKeys = Object.keys(filters)
return array.filter(item => {
return filterKeys.every(key => {
if (!filters[key].length) return true
return !!~filters[key].indexOf(item[key])
})
})
},
/**
* 数组对象去重
* @param {*} arr 目标数组
* @param {*} reference 去重参数
*/
arrayHeavy: function unique (arr, reference) {
let map = new Map()
arr.forEach((item, index) => {
if (!map.has(item[reference])) {
map.set(item[reference], item)
}
})
return [...map.values()]
},
classifier: function (array, val) {
let map = {}
let dest = []
let len = array.length
for (let i = 0; i < len; i++) {
let ai = array[i]
if (!map[ai.val]) {
dest.push({
val: ai.val,
data: [ai]
})
map[ai.val] = ai
} else {
// eslint-disable-next-line camelcase
let dest_len = dest.length
// eslint-disable-next-line camelcase
for (let j = 0; j < dest_len; j++) {
let dj = dest[j]
if (dj.val === ai.val) {
dj.data.push(ai)
break
}
}
}
}
return dest
}
}
export default tool