filter顾名思义是过滤的意思,对付一维数组的过滤十分好用,如:
let data = [1,2,3,4]
let newArray = data.filter((now)=>{
return now>2
})
console.log(newArray) // [3,4]
但是多维数组咋办? 这样?
let data = [{
a: [{re:true},{re:false}]
b: '123'
},
{
a: [{re:true},{re:false}]
b: '123'
}
]
// 面对这种二维数组,需要根据第二层数组中的a里面的re为过滤条件。双重return?
let newArray = data.filter((now)=>{
return now.a.filter((second)=>{
return second.re === true
})
})
console.log(newArray) // [{a: [{re:true},{re:false}]b: '123'},{a: [{re:true},{re:false}]b:'123'}]
// 很显然,这么玩肯定不行的
最后还是forEach+filter,不知道有没有更优解
let data = [{
a: [{re:true},{re:false}]
b: '123'
},
{
a: [{re:true},{re:false}]
b: '123'
}
]
// 借助forEach解决最外重循环
let newArray = []
data.forEach((now,index)=>{
newArray[index] = now
newArray[index].a = now.a.filter((item) => {
return item.re === true
})
})
console.log(newArray) // [{a: [{re:true}]b: '123'},{a: [{re:true}]b:'123'}]
// 不比双重forEach简洁多少,而且filter只适合在最后一层用,如果是三维数组,还是要forEach两遍,但是可读性感觉强了一些
tips:以上代码仅自己做个记录,并没运行过。