首页 > 解决方案 > How to merge the contents of a nested array of objects?

问题描述

I have an array of objects called allLeads which stores a leadName and leadId for each item in the array along with an item called leads which is another array of objects.

But currently how I am receiving data from my backend is that the leads array only stores one object at a time. I want to merge this leads array for each leadId and leadName.

How it is currently

const allLeads = [
  {
    leadName: "software development",
    leadId: 123,
    leads: [{ profile: "hello", url: "bye" }]
  },
  {
    leadName: "software development",
    leadId: 123,
    leads: [{ profile: "lets", url: "go" }]
  },
  {
    leadName: "business development",
    leadId: 234,
    leads: [{ profile: "dont", url: "try" }]
  },
  {
    leadName: "business development",
    leadId: 234,
    leads: [{ profile: "other", url: "side" }]
  }
];

How I want it to be

const allLeads = [
  {
    leadName: "software development",
    leadId: 123,
    leads: [{ profile: "hello", url: "bye" }, { profile: "lets", url: "go" }]
  },
  {
    leadName: "business development",
    leadId: 234,
    leads: [{ profile: "dont", url: "try" }, { profile: "other", url: "side" }]
  }
];

标签: javascriptarraysreactjs

解决方案


const allLeads = [
  {
    leadName: "software development",
    leadId: 123,
    leads: [{ profile: "hello", url: "bye" }]
  },
  {
    leadName: "software development",
    leadId: 123,
    leads: [{ profile: "lets", url: "go" }]
  },
  {
    leadName: "business development",
    leadId: 234,
    leads: [{ profile: "dont", url: "try" }]
  },
  {
    leadName: "business development",
    leadId: 234,
    leads: [{ profile: "other", url: "side" }]
  }
];
function handle(array) {
  let obj = array.reduce((acc, cur) => {
    acc[cur.leadId] = acc[cur.leadId] || {};
    acc[cur.leadId].leads = acc[cur.leadId].leads || [];
    acc[cur.leadId].leadName = cur.leadName;
    acc[cur.leadId].leadId = cur.leadId;
    acc[cur.leadId].leads.push(...cur.leads);
    return acc;
  }, {});
  return Object.values(obj);
}
  console.log(handle(allLeads))


推荐阅读