103 lines
2.3 KiB
JavaScript
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
|