js的filter遇到多维数组怎么过滤?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'filter过滤对象数组
}
]
// ⾯对这种⼆维数组,需要根据第⼆层数组中的a⾥⾯的re为过滤条件。双重return?
let newArray = data.filter((now)=>{
return now.a.filter((second)=>{
=== 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) => {
=== true
})
})
console.log(newArray)  // [{a: [{re:true}]b: '123'},{a: [{re:true}]b:'123'}]
// 不⽐双重forEach简洁多少,⽽且filter只适合在最后⼀层⽤,如果是三维数组,还是要forEach两遍,但是可读性感觉强了⼀些tips:以上代码仅⾃⼰做个记录,并没运⾏过。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。