搜索框,输入关键字过滤对象数组
数组过滤的方法最常用的就是filter,那首先先说一下filter
语法:arr.filter((item,index,arr) => { return 条件});
作用:遍历数组arr,返回满足条件的所有制,放到一个新的数组中
参数:item 数组的每一项,index 索引下标,arr数组自身(基本不用)
返回值:满足条件后的一个新的数组
1 let arr = [1,2,6,8,3,2] 2 let arrF = arr.filter((v) => { 3 return v > 3 4 }) 5 console.log(arrF) // [6,8] 6 // 简写: 7 let arrF1 = arr.filter(v => v > 3) 8 console.log(arrF1) // [6,8]复制代码
这里说一下简写规则:如果箭头函数的参数只有一个的话,参数外面的小括号可以省略,如果函数函数的{}内只有一行代码的话不仅可以省略大括号,而且return也可以省略
好的既然了解了filter我们开始进入正题,如果一个数组里包含对象,如何根据对象里面的一个属性去过滤出来呢
1 let arr = [ 2 { 3 name: 'zhangsan', 4 id: '12345', 5 province: '上海', 6 }, 7 { 8 name: 'lisi', 9 id: '12346', 10 province: '江苏', 11 }, 12 { 13 name: 'wangwu', 14 id: '13346', 15 province: '安徽', 16 }, 17 { 18 name: 'zhaoliu', 19 id: '63346', 20 province: '山东', 21 } 22 ] 23 /** 24 * arr: 对象数组 25 * filter: 过滤字段 26 * keyWord: 输入的字符 27 */ 28 function queryArrByType(arr, filter, keyWord) { 29 if (!(filter instanceof Array) && !(typeof filter)) throw new TypeError('filter must be a array or string') 30 if (typeof filter === 'string') filter = [filter] 31 return arr.filter(item => { 32 for (var key of filter) { 33 if (item[key] && item[key].indexOf(keyWord) !== -1) { 34 return true 35 } 36 } 37 return false 38 }) 39 } 40 41 let arrFilter1 = queryArrByType(arr, ['name','id'], 'zhao') 42 console.log(arrFilter1) // [{name: "zhaoliu", id: "63346", province: "山东"}] 43 let arrFilter2 = queryArrByType(arr, ['name','province'], '上') 44 console.log(arrFilter2) // [{name: "zhangsan", id: "12345", province: "上海"}] 45 // 其它的大家自己测试复制代码
最后原文摘自https://blog.csdn.net/weixin_34090562/article/details/91397684

浙公网安备 33010602011771号