比较2个数组';并找到匹配的颜色id';然后创建一个新的数组Javascript

比较2个数组';并找到匹配的颜色id';然后创建一个新的数组Javascript,javascript,arrays,Javascript,Arrays,我仍在学习如何创建遍历数组的函数。我有一个很难理解的问题 我有两个不同的对象数组 阵列1: const data1 = [ { name: 'I am obj one', id: 125, category: [18], colors: [19, 20], }, { name: 'I am obj two', id: 111, category: [18], colors: [19, 20], }, ]; 阵列2

我仍在学习如何创建遍历数组的函数。我有一个很难理解的问题 我有两个不同的对象数组

阵列1:

const data1 = [
  {
    name: 'I am obj one',
    id: 125,
    category: [18],
    colors: [19, 20],
  },
  {
    name: 'I am obj two',
    id: 111,
    category: [18],
    colors: [19, 20],
  },
];
阵列2

const data2 = [
  {
    invitation: {
      name: 'Type',
      options: [
        {
          name: 'Show1',
          id: 21,
        },

        {
          name: 'Show2',
          id: 22,
        },
      ],
    },
  },

  {
    color: {
      name: 'Color',

      options: [
        {
          name: 'Gray',
          id: 19,
        },
        {
          name: 'Pink',
          id: 26,
        },
        {
          name: 'Yellow',
          id: 20,
        },
      ],
    },
  },
];
我试图创建一个新的data2数组,其中只有data1对象中的“颜色”选项。 对于上面的示例,我想返回一个新数组,如下所示:

const data2 = [
  {
    invitation: {
      name: 'Type',
      options: [
        {
          name: 'Show1',
          id: 21,
        },

        {
          name: 'Show2',
          id: 22,
        },
      ],
    },
  },

  {
    color: {
      name: 'Color',
      options: [
        {
          name: 'Gray',
          id: 19,
        },
       {
          name: 'Yellow',
          id: 20,
        },
      ],
    },
  },
];

这是到目前为止我的代码

const obj = data1.reduce((acc, item) => {
  acc[item.id] = item;
  return acc;
})

data2.forEach(d => {

return d;

});

console.log(data2);
缓存对象中的一个数组,可以将运行时间减少到线性。
然后我使用forEach方法。我只是不知道从这里走到哪里。

这应该可以为您解决问题

创建一组唯一的颜色ID,然后根据集合中存在的颜色ID从data2筛选颜色数据

const data1=[
{
姓名:“我是obj一号”,
id:125,
类别:[18],
颜色:[19,20],
},
{
姓名:“我是obj二号”,
id:111,
类别:[18],
颜色:[19,20],
},
];
常数数据2=[
{
邀请:{
名称:'类型',
选项:[
{
名称:“Show1”,
id:21,
},
{
名称:'Show2',
身份证号码:22,
},
],
},
},
{
颜色:{
名称:'颜色',
选项:[
{
姓名:'灰色',
身份证号码:19,
},
{
名字:“粉红”,
身份证号码:26,
},
{
名称:“黄色”,
身份证号码:20,
},
],
},
},
];
变量集=新集();
data1.forEach(obj=>{obj.colors.forEach(color=>set.add(color));}
)
data2[1]。color.options=data2[1]。color.options.filter(option=>set.has(option.id));

console.log(data2)我没有看到你的代码。你发了吗?你说你在尝试,但你展示的只是数据结构。对不起,我忘了我的代码。@Hdjjannana我提出了解决方案。请查收,谢谢!我希望在这方面做得更好。你知道什么好的资源吗?很高兴听到它帮助了你!是的,你可以浏览javascript.info。它是JS最好的网站之一。我也希望你不会介意投票并接受答案。这将有助于其他人寻找同样的解决方案。事实上,我本应该提到实践,以便在这方面做得更好