【问题标题】:Struggling to reduce努力减少
【发布时间】:2020-07-12 16:39:45
【问题描述】:

如果 'startDate' 相等,请寻求有关将所有账单合并或减少到对象数组中的最佳方法的帮助。

从这里:

{
    "id": 0,
    "startDate": "2020-01-10T07:00:00.000Z", //Same
    "endDate": "2020-01-24T07:00:00.000Z",
    "bills": {
      "name": "Bill 1",
    }
},
{
    "id": 1,
    "startDate": "2020-01-10T07:00:00.000Z", //Same
    "endDate": "2020-01-24T07:00:00.000Z",
    "bills": {
      "name": "Bill 2",
    }
}

到这里:

{
    "id": 0,
    "startDate": "2020-01-10T07:00:00.000Z", 
    "endDate": "2020-01-24T07:00:00.000Z",
    "bills": [
               {"name": "Bill 1",},
               {"name": "Bill 2",}
             ]
}

【问题讨论】:

  • 你必须分发到一个唯一日期的哈希表,然后存储一个数组/账单列表。

标签: javascript arrays filter reduce


【解决方案1】:

检查每个项目的数据并使用startDate 的键构建一个对象。
如果 key 不存在,则添加 key 和 value。
如果 key 已经存在,则追加账单。

const update = data => {
  const res = {};
  data.forEach(item => {
    if (!res[item.startDate]) {
      res[item.startDate] = { ...item, bills: [] };
    }
    res[item.startDate].bills.push(item.bills);
  });
  return Object.values(res);
};

const data = [
  {
    id: 0,
    startDate: "2020-01-10T07:00:00.000Z", //Same
    endDate: "2020-01-24T07:00:00.000Z",
    bills: {
      name: "Bill 1"
    }
  },
  {
    id: 1,
    startDate: "2020-01-10T07:00:00.000Z", //Same
    endDate: "2020-01-24T07:00:00.000Z",
    bills: {
      name: "Bill 2"
    }
  }
];

console.log(update(data));

【讨论】:

  • 这行得通。我试图使用reduce,这可能使它变得比实际需要的更复杂。谢谢!
猜你喜欢
  • 2016-12-28
  • 2011-01-05
  • 2013-03-12
  • 2015-11-13
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多