/* 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()] } } export default tool