JSON对象数组。将对象值按名称分组

埃里克 中号

我正在尝试根据包含对象的数组中的名称关键字对Javascript JSON对象值进行分组,这是一个动态数组,因此无法进行硬编码。

对象中有时间值

time_entries数组长度更改。

time_entries数组中可以包含1个或多个对象。

我想按时间对对象进行分组:小时分钟秒

{
    "activities": [
        {
            "name": "player one",
            "time_entries": [
                {
                    "days": 0,
                    "end_time": "2019-09-30 15:19:43",
                    "hours": 01,
                    "minutes": 02,
                    "seconds": 11,
                    "start_time": "2019-09-30 14:17:58"
                },
                {
                    "days": 0,
                    "end_time": "2019-09-25 15:40:11",
                    "hours": 0,
                    "minutes": 20,
                    "seconds": 4,
                    "start_time": "2019-09-25 15:20:15"
                },
                {
                    "days": 0,
                    "end_time": "2019-09-25 16:10:15",
                    "hours": 0,
                    "minutes": 30,
                    "seconds": 4,
                    "start_time": "2019-09-25 15:40:11"
                },

#there can be more objects here

            ]
        },
        {
            "name": "player two",
            "time_entries": [
                {
                    "days": 0,
                    "end_time": "2019-09-30 19:18:51",
                    "hours": 0,
                    "minutes": 0,
                    "seconds": 52,
                    "start_time": "2019-09-30 19:17:58"
                },

#there can be more objects here

            ]
        },
        {
            "name": "player three",
            "time_entries": [
                {
                    "days": 0,
                    "end_time": "2019-09-30 19:19:09",
                    "hours": 0,
                    "minutes": 0,
                    "seconds": 58,
                    "start_time": "2019-09-30 19:18:51"
                },
                {
                    "days": 0,
                    "end_time": "2019-09-30 21:21:09",
                    "hours": 2,
                    "minutes": 1,
                    "seconds": 0,
                    "start_time": "2019-09-30 19:20:09"
                },

#there can be more objects here

            ]
        }
    ]
}

我想要得到的是这样的东西

 [
        {
            "name": "player one",
            "time_entries": [
                {
                    "days": 0,
                    "end_time": "2019-09-25 16:10:15",
                    "hours": 01,
                    "minutes": 50,
                    "seconds": 19,
                    "start_time": "2019-09-30 14:17:58"
                }
            ]
        },
        {
            "name": "player two",
            "time_entries": [
                {
                    "days": 0,
                    "end_time": "2019-09-30 19:18:51",
                    "hours": 0,
                    "minutes": 0,
                    "seconds": 52,
                    "start_time": "2019-09-30 19:17:58"
                }
            ]
        },
        {
            "name": "player three",
            "time_entries": [
                {
                    "days": 0,
                    "end_time":"2019-09-30 21:21:09",
                    "hours": 2,
                    "minutes": 1,
                    "seconds": 58,
                    "start_time": "2019-09-30 19:18:51"
                }
            ]
        }
]

尼基尔

您可以按照以下步骤进行操作:

  • 使用map()方法迭代给定的活动并转换每个活动的time_entries属性。
  • getTimeEntry()方法采用一组时间条目,并返回最早的开始时间,最近的结束时间和转换为的总活动时间days, hours, minutes, seconds

let data = { "activities": [ { "name": "player one", "time_entries": [ { "days": 0, "end_time": "2019-09-30 15:19:43", "hours": 01, "minutes": 02, "seconds": 11, "start_time": "2019-09-30 14:17:58" }, { "days": 0, "end_time": "2019-09-25 15:40:11", "hours": 0, "minutes": 20, "seconds": 4, "start_time": "2019-09-25 15:20:15" }, { "days": 0, "end_time": "2019-09-25 16:10:15", "hours": 0, "minutes": 30, "seconds": 4, "start_time": "2019-09-25 15:40:11" } ] }, { "name": "player two", "time_entries": [ { "days": 0, "end_time": "2019-09-30 19:18:51", "hours": 0, "minutes": 0, "seconds": 52, "start_time": "2019-09-30 19:17:58" } ] }, { "name": "player three", "time_entries": [ { "days": 0, "end_time": "2019-09-30 19:19:09", "hours": 0, "minutes": 0, "seconds": 58, "start_time": "2019-09-30 19:18:51" }, { "days": 0, "end_time": "2019-09-30 21:21:09", "hours": 2, "minutes": 1, "seconds": 0, "start_time": "2019-09-30 19:20:09" } ] } ] };

let result = {};

result.activities = data.activities.map(item => {
  return {
    "name": item.name,
    "time_entries": [getTimeEntry(item.time_entries)]
  };
});

function getTimeEntry(timeEntries) {
  let earliestTime = timeEntries[0].start_time;
  let latestTime = timeEntries[0].end_time;

  // Find earliest start time and latest end time.
  timeEntries.forEach(entry => {
    if (new Date(entry.start_time) < new Date(earliestTime)) {
      earliestTime = entry.start_time;
    }

    if (new Date(entry.end_time) > new Date(latestTime)) {
      latestTime = entry.end_time;
    }
  });

  // Calculate total seconds.
  let seconds = timeEntries.reduce((totalSeconds, currentEntry) => {
    let seconds = 0;

    seconds += currentEntry.seconds;
    seconds += currentEntry.minutes * 60;
    seconds += currentEntry.hours * 60 * 60;
    seconds += currentEntry.days * 24 * 60 * 60;

    return totalSeconds + seconds;
  }, 0);

  // Convert total seconds to days, hours, minutes, and seconds.
  let days = Math.floor(seconds / (24 * 60 * 60));
  seconds = seconds % (24 * 60 * 60);
  let hours = Math.floor(seconds / (60 * 60));
  seconds = seconds % (60 * 60);
  let minutes = Math.floor(seconds / 60);
  seconds = seconds % 60;

  return {
    "start_time": earliestTime,
    "end_time": latestTime,
    "days": days,
    "hours": hours,
    "minutes": minutes,
    "seconds": seconds
  };
}

console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按唯一值对将对象数组分组

来自分类Dev

如何将对象数组分组以按对象值分隔数组?

来自分类Dev

PHP:将对象数组按对象元素分组的功能

来自分类Dev

在Json对象中按列名称分组

来自分类Dev

按属性将对象分组到字典

来自分类Dev

将对象数组的值相加

来自分类Dev

按数组中的对象分组

来自分类Dev

按日期分组对象数组

来自分类Dev

按年份分组对象数组

来自分类Dev

按数组逐对象分组

来自分类Dev

数组对象按元素分组?

来自分类Dev

嵌套然后将对象分组为数组

来自分类Dev

将对象转换为对象值数组

来自分类Dev

按日期分组对象值

来自分类Dev

Javascript按对象数组(复杂对象)分组

来自分类Dev

按属性对对象数组进行分组并对值求和

来自分类Dev

按值对数组对象进行分组 - javascript

来自分类Dev

通过JSON键将对象分组

来自分类Dev

按值将对象数组映射到新的数组数组中

来自分类Dev

将对象数组与值数组匹配

来自分类Dev

如何按值对对象的数据进行分组并为关键对象指定特定的名称?

来自分类Dev

按值分组json数组

来自分类Dev

按键将对象分组

来自分类Dev

按键将对象分组

来自分类Dev

按名称拆分json对象

来自分类Dev

JavaScript如何将对象数组中的值转换为数组,以便每个子数组将键中的值分组?

来自分类Dev

使用Lodash或Underscore将对象按多列分组

来自分类Dev

按属性阈值将对象列表分组为子组

来自分类Dev

将对象数组转换为对象值的数组