如何为 Javascript 中的复杂对象数组链接映射和过滤方法?

How to chain map and filter methods for a complex array of objects in Javascript?

我有一个数组如下:

var arr = [
    {                                                   
        subArray1:[
            {
                subArray2:[
                    {
                        value: 1
                    },
                    {
                        value: 0
                    }
                ]
            },
            {
                subArray2:[
                    {
                        value: 1
                    },
                    {
                        value: 0
                    }
                ]
            }
        ]
    }
];

我想过滤掉 subArray2 中包含值 1 和 return 整个数组的所有对象。 预期输出如下:

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; }