首页 > 解决方案 > 基于对象数组中的对象属性组合对象

问题描述

我只想在其中一个属性的基础上合并对象,还想在输出中添加缺少的Days 名称

Take this for an example:

var array =  [
       {
      "heure1": "14:00",
      "heure2": "17:00",
      "day": "Sunday",
    },
       {
      "heure1": "08:00",
      "heure2": "13:00",
      "day": "Sunday",
    },
       {
      "heure1": "14:00",
      "heure2": "16:00",
      "day": "Monday",
    },
       {
      "heure1": "08:00",
      "heure2": "18:00",
      "day": "Monday",
    },
  ];

预期结果:

var array =  [
       {
      "heure": ["14:00","17:00","08:00","13:00"],
      "day": "Sunday",
    },
     {
      "heure": ["14:00","16:00","08:00","18:00"],
      "day": "Monday",
    },
    {
      "heure": [],
      "day": "Saturday",
    },
    {
      "heure": [],
      "day": "Friday",
    },
    {
      "heure": [],
      "day": "Thursday",
    },
    {
      "heure": [],
      "day": "Wednesday",
    },
    {
      "heure": [],
      "day": "Tuesday",
    },

  ];

我也尝试了一些堆栈溢出的答案,但没有成功:-(一天的顺序无关紧要。提前谢谢。

标签: javascriptarraysobject

解决方案


您可以首先为一周中的 7 天创建 7 个条目,每个条目都有一个空数组作为heure属性。

然后迭代原始数据,查找正确的条目,并将两次推送到heure数组中。

请注意,您的Day属性在示例输入(DAY、Day)中有不同的拼写。我强烈建议对此类属性名称使用全部小写。

这是一个实现:

var array =  [{"heure1": "14:00","heure2": "17:00","day": "Sunday",}, {"heure1": "08:00","heure2": "13:00","day": "Sunday",}, {"heure1": "14:00","heure2": "16:00","day": "Monday",}, {"heure1": "08:00","heure2": "18:00","day": "Monday", },];

let days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
let obj = Object.fromEntries(days.map(day => [day, { heure: [], day }]));
for (let {heure1, heure2, day} of array) obj[day].heure.push(heure1, heure2);
let result = Object.values(obj);

console.log(result);


推荐阅读