提问者:小点点

一个包含对象数组的对象与简单数组的比较


我使用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));
}

但这给了我一个错误,即我不能mapids.data[I],即使我console.log(ids.data[I])从初始对象到达内部数组时也是如此。

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

我该如何处理这件事呢?请注意,来自API的响应是一个对象包含一个包含数千个对象的数组。

非常感谢


共1个答案

匿名用户

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

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));