我使用Nodejs,有一个对象包含一个object数组(API请求的结果)和一个简单的值数组。
它们看起来是这样的:
// Object > Array > Objects (retrieved from an API request) :
{
"data": [
{
"id": 1,
"name": "Jimmy"
},
{
"id": 825,
"name": "Billy"
},
]
}
// Simple array :
[1, 825, …]
如何将包含对象数组的对象与简单数组进行比较?
我要找的是,从简单数组中获取ID,并将它们与另一个“复杂”对象进行比较,以检索name
属性以及简单数组中的相应ID和另一个对象属性id
,然后将结果存储在一个对象数组中。
简单来说,我希望有这样的结果:
[
{ id: 1, name: "Jimmy" },
{ id: 825, name: "Billy" }
]
当从API请求中检索“复杂”对象时,我尝试了以下操作:
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])
从初始对象到达内部数组时也是如此。
我还尝试直接使用.map()
而不使用for...in
循环,但这也起不到作用。也尝试了reduce
,但结果相同。
我该如何处理这件事呢?请注意,来自API的响应是一个对象包含一个包含数千个对象的数组。
非常感谢
这里有两种不同的单行方法。
null
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));