在开发过程中我们常常遇到,需要过滤数据的情况。好比我们从接口获取到的数据,不同的模块可能所需要的具体内容不同,又或者有4个tab,当我们点击其中一个对应的标题时,隐藏另外3个,这时我们很自然的想到的是根据不同的筛选条件重新请求接口,但是这样往往是耗费性能的。
针对上边的问题,我们可以一次请求一个比较大的数据集,当我们具体显示页面中的某一部分时再进行筛选。在这里我将介绍,js数组操作filter()
filter()接受三个参数,返回的是数组,数组内是所有满足条件的元素。如果不满足条件,filter()返回的是一个空数组。
filter()可以做什么?
1 创建一个数组,判断数组中是否存在某个值
var newarr = [
{ num: 1, val: 'ceshi', flag: 'aa' },
{ num: 2, val: 'ceshi2', flag: 'aa2' }
]
console.log(newarr.filter(item => item.num===2 ))
2.去掉空数组空字符串、undefined、null
var arr = ['1','2',undefined, '3.jpg',undefined]
var newArr = arr.filter(item => item)
console.log(newArr)
var arr = ['1','2',null, '3.jpg',null]
var newArr = arr.filter(item => item)
console.log(newArr)
>//空字符串里面不能包含空格
var arr = ['1','2','', '3.jpg','']
var newArr = arr.filter(item => item)
console.log(newArr)
3.去掉数组中不符合项
var arr = [20,30,50, 96,50]
var newArr = arr.filter(item => item>40)
console.log(newArr)
4.数组去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index)
console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]