使用Java过滤数组和子数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Java过滤数组和子数组相关的知识,希望对你有一定的参考价值。

我正在尝试过滤数组和子数组,但是子数组fil

因此,我试图获取年龄大于18岁的对象,已付款且漫画= 2

这是我的尝试,我不明白为什么它不起作用(ofc我简化了数组和代码

data = [{
    Age: '21',
    Details: [{
        gender: 'male',
        Paid: 100000,
        subDetails: [{
            comics: 1,
            status: 'rookie'
          },
          {
            comics: 2,
            status: 'rookie'
          }
        ]
      },
      {
        gender: 'female',
        subDetails: [{
            comics: 1,
          },
          {
            comics: 2,
          }
        ]
      }
    ]
  },
  {
    Age: '16',
    Details: [{
      gender: 'female',
      Paid: 150000,
      subDetails: [{
          comics: 1,
          status: 'rookie'
        },
        {
          comics: 2,
          status: 'rookie'
        }
      ]
    }]
  }
]

预期结果应该是:

[{
  Age: '21',
  Details: [{
    gender: 'male',
    Paid: 100000,
    subDetails: [{
      comics: 2,
      status: 'rookie'
    }]
  }]
}]

但是我什至无法超越第二个过滤条件

答案

[可能有reduce和几个filter

const data = [{
    Age: '21',
    Details: [{
            gender: 'male',
            Paid: 100000,
            subDetails: [{
                    comics: 1,
                    status: 'rookie'
                },
                {
                    comics: 2,
                    status: 'rookie'
                }
            ]},
        {
            gender: 'female',
            subDetails: [{
                    comics: 1,
                },
                {
                    comics: 2,
                }
            ]}]},
{
    Age: '16',
    Details: [{
            gender: 'female',
            Paid: 150000,
            subDetails: [{
                    comics: 1,
                    status: 'rookie'
                },
                {
                    comics: 2,
                    status: 'rookie'
                }]}]}]

const filterData = data => minAge => comicsCount => data.reduce((acc,curr)=>+curr.Age>=minAge?[...acc, ...curr.Details.filter(d=>d.Paid && d.subDetails.filter(sd=>sd.comics===comicsCount))]:acc,[])
    
console.log(filterData(data)(18)(2))

以上是关于使用Java过滤数组和子数组的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤数组对象和子节点对象中某一属性不符合条件的

js简洁代码片段

JAVA输出指定目录下的子目录和子文件

嵌套过滤器:$filter 数组,然后是 $filter 子数组

华为机试真题 Java 实现等和子数组最小和2022.11 Q4新题

华为机试真题 Java 实现等和子数组最小和2022.11 Q4新题