首页 > 解决方案 > 如何根据同一日期合并两个对象数组

问题描述

实际上,我想将所有具有相同日期的产品合并到同一个对象中,如下所示,我尝试了很多算法但它不起作用所以这就是我发布这篇文章的原因。您可以找到数据示例和预期结果。

let obj = {}; for(let i = 0; i < this.data.length; i++){ let date = this.data[i].Date; let p_date = obj[date] || {}; obj[date] = Object.assign(p_date, this.data[i]); } let result = Object.values(obj); return result; 


  this.data = [
                      {
                        "Date": "12/06/2019",
                        "Rank": 1,
                        "ASIN": "B01N9J7MLI",
                        "Rating": "4,1",
                        "Reviews": 4592,
                        "Price": "114,99",
                        "Prime": "No"
                      },
                      {
                        "Date": "12/06/2019",
                        "Rank": 2,
                        "ASIN": "B074QXGBG6",
                        "Rating": 4,
                        "Reviews": 29163,
                        "Price": "60,99",
                        "Prime": "No"
                      }];

预期结果 :

 this.data = {
                "Date": "12/06/2019",
                "Products": [
                {
                "Date": "12/06/2019",
                "Rank": 1,
                "ASIN": "B01N9J7MLI",
                "Rating": "4,1",
                "Reviews": 4592,
                "Price": "114,99",
                "Prime": "No"
              },
              {
                "Date": "12/06/2019",
                "Rank": 2,
                "ASIN": "B074QXGBG6",
                "Rating": 4,
                "Reviews": 29163,
                "Price": "60,99",
                "Prime": "No"
              }
                ],
              }

感谢您的回答

标签: javascriptarraysjavascript-objects

解决方案


使用Array#reduce将数据累积到具有日期属性的对象中。Foreach 对象查看累积对象中是否存在具有此日期的属性。如果不使用属性日期和产品(使用空数组)创建它。在这两种情况下,将当前对象添加到此数组中。
最后使用Object.values从您的对象中获取值以获取所需的数组。

  this.data = [
    {
      "Date": "12/06/2019",
      "Rank": 1,
      "ASIN": "B01N9J7MLI",
      "Rating": "4,1",
      "Reviews": 4592,
      "Price": "114,99",
      "Prime": "No"
    },
    {
      "Date": "12/06/2019",
      "Rank": 2,
      "ASIN": "B074QXGBG6",
      "Rating": 4,
      "Reviews": 29163,
      "Price": "60,99",
      "Prime": "No"
    }];
    
    let res = Object.values(this.data.reduce((acc, cur) => {
        if (!acc[cur.Date])
            acc[cur.Date] = {Date: cur.Date, Products: []};
        acc[cur.Date].Products.push(cur);
        return acc;
    }, {}));
    
    console.log(res);


推荐阅读