假设一组JSON数据中,需要你根据某一个值去筛选出来当前值所在的对象,最基本的做法:
遍历数组然后判断这个值是否等于你要查找的那个值,如果等于就返回当前遍历的节点对象。
那么问题来了,如果是5个条件呢,你要嵌套遍历5次吗?那如果是10个条件呢?嵌套遍历比较笨,而且性能也不好,所以使用es6的filter方法更好。
思路是先定义个空对象来保存筛选条件,然后再遍历数组,然后通过比较数组的数组项和条件对象的健值,找到后返回。
// 多重过滤 function multiFilter(array, filters) { const filterKeys = Object.keys(filters) // 先把筛选条件保存下来 // 主要是用filter方法来过滤 const res = array.filter((item) => { const isHave = filterKeys.every((key) => { let targetValue = filters[key] // 条件的值 let originValue = item[key] // 元数据的值 if (!targetValue) { // 如果条件为空就返回对象 return true } else { if (originValue === targetValue) { // 否则返回条件相等的的对象 return true } else { return false } } }) return isHave }) return res }