将多个对象合并为一个对象并组合属性 JavaScript

我在一个数组中有多个对象,我想合并所有具有相同 id 的对象,但我也想合并一个属性中的所有值(在这种情况下,通道)


这是代码:


defaultArray = [

  {

    id: "FirstId",

    name: "Some random name"

    channels: [{

      id: "Channel-ASD",

      name: "Channel ASD"

    }]

  },

  {

    id: "FirstId",

    name: "Some random name"

    channels: [{

      id: "Channel-QWE",

      name: "Channel QWE"

    }]

  },

  {

    id: "SecondId",

    name: "Some random name"

    channels: [{

      id: "Channel-QAZ",

      name: "Channel QAZ"

    }]

  }

];

预期输出:


newArray = [

  {

    id: "FirstId",

    name: "Some random name"

    channels: [

      {

        id: "Channel-ASD",

        name: "Channel ASD"

      },

      {

        id: "Channel-QWE",

        name: "Channel QWE"

      }

    ]

  },

  {

    id: "SecondId",

    name: "Some random name"

    channels: [{

      id: "Channel-QAZ",

      name: "Channel QAZ"

    }]

  }

]


暮色呼如
浏览 194回答 1
1回答

慕莱坞森

你需要学习filter, map, reduce, some, ...let defaultArray = [  {    id: "FirstId",    name: "Some random name",    channels: [{      id: "Channel-ASD",      name: "Channel ASD"    }]  },  {    id: "FirstId",    name: "Some random name",    channels: [{      id: "Channel-QWE",      name: "Channel QWE"    }]  },  {    id: "SecondId",    name: "Some random name",    channels: [{      id: "Channel-QAZ",      name: "Channel QAZ"    }]  }];let transformed= defaultArray.reduce((result, item, index, original)=>{  if (result.some(i=>i.id===item.id)) return result;  let channels = original.reduce((r,i)=>{    i.id===item.id && (r=[...r, ...i.channels]);    return r;  },[]);  result.push({    ...item,    channels  });  return result;},[]);console.log(JSON.stringify(transformed,null,2));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript