删除重复的数组并合并值

时间:2020-04-23 09:39:55

标签: javascript reactjs

我有一组对象。我不想渲染重复数组,但我希望将其与之合并的项目合并,如下所示。

原始数组

array = [
  {
    name: 'Test',
    items: [
      {
        id: 1,
        product_name: "Kbana 1",
      },
      {
        id: 2,
        product_name: "Kbana 2",
      },
    ]
  },
  {
    name: 'Test 2',
    items: [
      {
        id: 3,
        product_name: "Kbana 3",
      },
      {
        id: 4,
        product_name: "Kbana 4",
      },
    ]
  },
  {
    name: 'Test 2',
    items: [
      {
        id: 5,
        product_name: "Kbana 5",
      },
      {
        id: 6,
        product_name: "Kbana 6",
      },
    ]
  },
]

现在我有两个相同的数组对象,它们的索引分别为1和2。现在我想将索引2的项值与索引1合并。

array = [
      {
        name: 'Test',
        items: [
          {
            id: 1,
            product_name: "Kbana 1",
          },
          {
            id: 2,
            product_name: "Kbana 2",
          },
        ]
      },
      {
        name: 'Test 2',
        items: [
          {
            id: 3,
            product_name: "Kbana 3",
          },
          {
            id: 4,
            product_name: "Kbana 4",
          },
          {
            id: 5,
            product_name: "Kbana 5",
          },
          {
            id: 6,
            product_name: "Kbana 6",
          },
        ]
      }
    ]

2 个答案:

答案 0 :(得分:2)

您可以使用Array.reduce按名称对数组元素进行分组。

我们首先使用element.name作为键来创建对象图,然后使用Object.values将其返回为数组。

array = [ { name: 'Test', items: [ { id: 1, product_name: "Kbana 1", }, { id: 2, product_name: "Kbana 2", }, ] }, { name: 'Test 2', items: [ { id: 3, product_name: "Kbana 3", }, { id: 4, product_name: "Kbana 4", }, ] }, { name: 'Test 2', items: [ { id: 5, product_name: "Kbana 5", }, { id: 6, product_name: "Kbana 6", }, ] }, ] 

// Use array.reduce and map to organise by name.
let result = Object.values(array.reduce((map, val) => { 
    if (!map[val.name]) { 
        map[val.name] = { name: val.name, items: [] };
    }
    map[val.name].items = map[val.name].items.concat(val.items);
    return map;
}, {}))

console.log("Result:", result);

答案 1 :(得分:1)

var arr = [
  {
    name: 'Test',
    items: [
      {
        id: 1,
        product_name: "Kbana 1",
      },
      {
        id: 2,
        product_name: "Kbana 2",
      },
    ]
  },
  {
    name: 'Test 2',
    items: [
      {
        id: 3,
        product_name: "Kbana 3",
      },
      {
        id: 4,
        product_name: "Kbana 4",
      },
    ]
  },
  {
    name: 'Test 2',
    items: [
      {
        id: 5,
        product_name: "Kbana 5",
      },
      {
        id: 6,
        product_name: "Kbana 6",
      },
    ]
  },
]

const newArr = [];

for(var i = 0;i<arr.length;i++)
{
    var name = arr[i].name;
    for(var j = 0;j<arr.length;j++)
    {
       if(i != j)
       {
          if(name === arr[j].name)
          {
              arr[i].items = [...arr[i].items, ...arr[j].items]
              arr[j].name = "remove";
          }
       }
    }
}

arr = arr.filter(data => data.name !== "remove");

console.log(arr);