搜索框,输入关键字过滤对象数组

数组过滤的方法最常用的就是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

posted @ 2020-04-01 10:53  Grace_Y  阅读(460)  评论(0)    收藏  举报