[英]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.