过滤对象数组并仅获取属性与数组中的对象匹配的对象

问题描述 投票:0回答:1

我有一个像这样的对象数组

let input = [
    {
        "metadata": { "id": 1071, "name": "USA" },
        "accesories": [ { "name": "steel" } ]
    },
    {
        "metadata": { "id": 1068, "name": "China" },
        "accesories": [ { "name": "electronics" } ]
    },
]
Desired output: ["USA", "China"]

为了获得上述结果,我使用以下

input.map((el) => el?.metadata?.name);

但是,如果我想首先按

electronics
进行过滤,并根据哪个对象具有名称为
electronics
的配件,我该如何实现该结果。

例如

output: ["USA"] //if i want to filter by object which has name steel
output: ["China"] //if i want to filter by object which has name electronics

can someone let me know how can i use filter with above map method 

 
javascript reactjs arrays json loops
1个回答
0
投票

您可以通过首先根据所需配件名称的存在来过滤数组,然后映射过滤后的数组以提取名称,如下所示

let input = [
    {
        "metadata": { "id": 1071, "name": "USA" },
        "accesories": [ { "name": "steel" } ]
    },
    {
        "metadata": { "id": 1068, "name": "China" },
        "accesories": [ { "name": "electronics" } ]
    },
];
const filterParameter = "electronics";

const filteredObjects = input.filter(el => el?.accesories.some(acc => acc?.name === filterParameter));
const result = filteredObjects.map(el => el?.metadata?.name);

console.log(result);

© www.soinside.com 2019 - 2024. All rights reserved.