使用 javascript 过滤嵌套的对象数组

Are*_*rot 3 javascript arrays loops object reactjs

我发现过滤嵌套对象数组很困难。有人可以让我知道我哪里出了问题吗?

这是数据,我想过滤掉所有有风险的对象P1

    {
        "title": "QA",
        "rows": [
            {
                "risk": "P1",
                "Title": "Server down",
            },
            {
                "risk": "P3",
                "Title": "Permission issue",
            }
        ]
    }, 
    {
        "title": "Prod",
        "rows": [
            {
                "risk": "P5",
                "Title": "Console log errors fix",
            },
            {
                "risk": "P1",
                "Title": "Server is in hung state",
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下

[
    {
        "title": "QA",
        "rows": [
            {
                "risk": "P1",
                "Title": "Server down",
            }
        ]
    }, 
    {
        "title": "Prod",
        "rows": [
            {
                "risk": "P1",
                "Title": "Server is in hung state",
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

为了实现这一目标,我尝试了这种方法,但无法得到想要的结果。有人可以告诉我哪里出了问题吗

data.forEach((element, index) => {
  return element.rows.filter( x => x.risk === 'P1' )
});
Run Code Online (Sandbox Code Playgroud)

Mus*_*tor 8

您应该使用map()filter()

const input = [
  {
    title: "QA",
    rows: [
      {
        risk: "P1",
        Title: "Server down",
      },
      {
        risk: "P3",
        Title: "Permission issue",
      },
    ],
  },
  {
    title: "Prod",
    rows: [
      {
        risk: "P5",
        Title: "Console log errors fix",
      },
      {
        risk: "P1",
        Title: "Server is in hung state",
      },
    ],
  },
];

const output = input.map((obj) => ({
  ...obj,
  rows: obj.rows.filter((row) => row.risk === "P1"),
}));

console.log(output);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

解释

您希望为每个原始对象值返回一个对象,即映射,1:1因此您的主要操作是map()

然后,您想要返回相同的对象,只是该属性rows应该只包含rowswith risk === "P1",因此您需要行filter()并使用该更新的属性创建一个新对象(您应该将对象视为immutablerows