繁体   English   中英

将包含对象数组的 object 与简单数组进行比较

[英]Comparing one object containing array of objects with simple array

我正在使用 Nodejs,并且有一个 object 包含一个 object 数组(API 请求的结果)和一个简单的值数组。

它们看起来像这样:

// Object > Array > Objects (retrieved from an API request) :
{
    "data": [
        {
            "id": 1,
            "name": "Jimmy"
        },
        {
            "id": 825,
            "name": "Billy"
        },
    ]
}

// Simple array :
[1, 825, …]

如何将包含对象数组的 object 与简单数组进行比较?

我正在寻找的是,从简单数组中获取 ID,并将它们与其他“复杂” object 进行比较,以检索简单数组中具有相应 ID 的name属性和其他 object 属性id ,然后将结果存储在对象数组。

简单地说,我想得到这样的结果:

[
    { id: 1, name: "Jimmy" },
    { id: 825, name: "Billy" }
]

由于从 API 请求中检索到“复杂” object,因此我尝试了以下操作:

const ids = await axios.get(/* API CALL */);

for (let i in ids.data) {
    ids.data[i].map(el => console.log(el.name));
}

但这给了我一个错误,说我不能map ids.data[i] ,即使当我console.log(ids.data[i])时,我还是从最初的 object 进入内部数组。

我也尝试直接使用.map()而不使用for... in循环,但这也不起作用。 也尝试了reduce但结果相同。

我应该如何处理这个? 请注意,来自 API 的响应是一个 object,其中包含一个包含数千个 object 的数组。

非常感谢

只需使用reduce ,如果id存在于simpleArray中,则将其推送到acc

 const obj = { data: [ { id: 1, name: "Jimmy", }, { id: 825, name: "Billy", }, ], }; const simpleArray = [1, 825, 419]; const result = obj.data.reduce((acc, curr) => { const { id, name } = curr; const isExist = simpleArray.includes(id); if (isExist) acc.push({ id, name }); return acc; }, []); console.log(result);

您也可以使用另一种方法,即 go 在simpleArray中一个一个地使用,并在比较obj中的id时形成所需的数组。

 const obj = { data: [ { id: 1, name: "Jimmy", }, { id: 825, name: "Billy", }, ], }; const simpleArray = [1, 825, 419]; const result = simpleArray.reduce((acc, curr) => { const elementInObject = obj.data.find((o) => o.id === curr); if (elementInObject) acc.push(elementInObject); return acc; }, []); console.log(result);

这里有两种不同的单行方法。

 const result = { data: [ { id: 1, name: "Jimmy" }, { id: 825, name: "Billy" } ] }; const ids = [1, 825, 12, 'xx']; let output = result.data.filter((obj) => ids.includes(obj.id)); console.log(output); output = ids.map((id) => result.data.find((o) => o.id === id)); console.log(output.filter(obj=>obj;== undefined));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM