使用基于嵌套值的数组过滤对象数组 [英] Filtering array of objects with arrays based on nested value

查看:771
本文介绍了使用基于嵌套值的数组过滤对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图根据一些嵌套对象过滤数组。我准备了一些小提琴

I am trying to filter an array, based on some nested object. I prepared some Fiddle

输入数组看起来像这样:

Input array looks like this:

let arrayOfElements = 
    [
        {
           "name": "a",
           "subElements": 
           [
             {"surname": 1},
             {"surname": 2}
           ]
        },
        {
           "name": "b",
           "subElements": 
           [
             {"surname": 3},
             {"surname": 1}
           ]
        },
        {
           "name": "c",
           "subElements": 
           [
             {"surname": 2},
             {"surname": 5}
           ]
        }
    ];

我希望这种情况的输出看起来像这样:

I want the output for this case, to look like this:

let filteredArray = 
    [
        {
          "name": "a",
          "subElements": 
          [
            {"surname": 1}
          ]
        },
        {
          "name": "b",
          "subElements": 
          [
            {"surname": 1}
          ]
        }
];

我使用这个公式来做到这一点:

I am using this formula to do that:

let filteredArray = arrayOfElements.filter((element) => element.subElements.some((subElement) => subElement.surname === 1));

输出几乎是好的,但它返回带有姓氏的所有对象的对象(更好地检查小提琴:D ),而不是切断它们。如何改进过滤?

Output is almost good, but it returns objects with all objects with surnames (better check that fiddle :D), instead of cutting them away. How can i improve the filtering ?

推荐答案

致电过滤器后,你需要将结果传递给 map ,如下所示:

After you call filter, you need to pipe the results to map, like this:

let filteredArray = arrayOfElements
  .filter((element) => 
    element.subElements.some((subElement) => subElement.surname === 1))
  .map(element => {
    let newElt = Object.assign({}, element); // copies element
    return newElt.subElements.filter(subElement => subElement.surName === '1');
  });

我在这里假设您不想操纵原始数组。所以,我正在使用Object.assign。

I am assuming here that you don't want to manipulate the original array. So, I am using Object.assign.

这篇关于使用基于嵌套值的数组过滤对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆