首页 > 解决方案 > JS 如何最好地分组并进行值查找/替换

问题描述

我正在编写一个程序,它返回一堆任务,其中时间戳分配给用户,我想知道如何最好地转换涉及的两个数据集以进行显示。

我的任务数据结构如下所示:

tasks = [{
    "id": 1,
    "resource_id": 1,
    "day": '2019-10-29'
},
{
    "id": 2,
    "resource_id": 1,
    "day": '2019-10-28'
},
{
    "id": 3,
    "resource_id": 1,
    "day": '2019-10-30'
},
{
    "id": 4,
    "resource_id": 2,
    "day": '2019-10-31'
},
{
    "id": 5,
    "resource_id": 2,
    "day": '2019-10-30'
},
{
    "id": 6,
    "resource_id": 2,
    "day": '2019-10-28'
},
{
    "id": 7,
    "resource_id": 3,
    "day": '2019-10-28'
},
{
    "id": 8,
    "resource_id": 3,
    "day": '2019-10-29'
}]

用户喜欢这样:

users = [{ 
   "id": 1,
   "first_name": "Anthony",
   "last_name": "Smith",
},
{
    "id": 2,
    "first_name": "Jason",
    "last_name": "Jones",
},
{
    "id": 3,
    "first_name": "Billy",
    "last_name": "Phllips",
}]
  1. task.resource_id链接到user.id.
  2. task.day将永远是一个工作日。
  3. 一个用户在一周内可能有多个任务,但每天只有 1 个。

所以我想我现在真正想要实现的是如何转换我的 2 个数据集以最好地显示用户的所有任务,其中所述用户的任务按日期排序。

在上面的数据示例中,输出如下所示:

Anthony Smith: Mon 28th, Tue 29th, Wed 30th
Jason Jones: Mon 28th, Wed 30th, Thur 31st
Billy Phillips: Mon 28th, Tue 29th

我不在乎用户名是否按该用户的较早任务排序,只要对该用户内的任务日期进行排序即可。

到目前为止,我想出什么来改变我的任务:

let grouped_tasks = tasks.reduce(function (r, a) {
    r[a.resource_id] = r[a.resource_id] || [];
    r[a.resource_id].push(a);
    return r;
}, Object.create(null));

它本质上按 对任务进行分组,并将其task.resource.id附加task.resource_id为该分组的键。这应该可以更容易地进行查找,users.id然后task.resource_id获取用户的名字和姓氏。

从那里我还必须按day升序排序,但是我不禁觉得有一个比我迄今为止所取得的更清洁、更好的解决方案来解决这个问题。

我真的很感激帮助!:)

谢谢。

标签: javascriptarraysgroup-by

解决方案


推荐阅读