问题描述
var arr = [
{
subArray1:[
{
subArray2:[
{
value: 1
},{
value: 0
}
]
},{
subArray2:[
{
value: 1
},{
value: 0
}
]
}
]
}
];
我想过滤掉 subArray2 中包含值 1 的所有对象并返回整个数组。 预期输出如下:
newArr= [
{
subArray1:[
{
subArray2:[
{
value: 1
}
]
},{
subArray2:[
{
value: 1
}
]
}
]
}
]
我无法以获取上述所需输出的方式链接 map 和 filter 方法。 请帮助我实现这一目标。
解决方法
您需要映射每个 arr
项和每个 arr.subArray1
项,然后过滤 subArray2
:
var arr = [
{
subArray1:[
{
subArray2:[
{
value: 1
},{
value: 0
}
]
},{
subArray2:[
{
value: 1
},{
value: 0
}
]
}
]
}
];
console.log(
arr.map(({...el}) => {
el.subArray1 = el.subArray1.map(({...el1}) => {
el1.subArray2 = el1.subArray2.filter(({value}) => value !== 0);
return el1;
});
return el;
})
)
假设只有那些嵌套数组,您可以将函数 reduce
与函数 filter
一起使用。
const arr = [ { subArray1:[ { subArray2:[ { value: 1 },{ value: 0 } ] },{ subArray2:[ { value: 1 },{ value: 0 } ] } ] }],result = arr.reduce((a,{subArray1}) => {
a.push({
subArray1: subArray1.reduce((a,{subArray2}) => {
a.push({subArray2: subArray2.filter(({value}) => value === 1)});
return a;
},[])
});
return a;
},[]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }