日期多条件分组疑惑

发布于 2022-09-12 22:44:39 字数 2603 浏览 15 评论 0

原始数据

const arr = [
        {
            "id": 255,
            "name": "上午班",
            "user_id": 14,
            "time_from": "2021-03-10",
            "time_to": "2021-03-10"
        },
        {
            "id": 256,
            "name": "下午班",
            "user_id": 14,
            "time_from": "2021-03-10",
            "time_to": "2021-03-10"
        },
        {
            "id": 260,
            "name": "晚班",
            "user_id": 14,
            "time_from": "2021-03-10", // 跨日期
            "time_to": "2021-03-11" // 跨日期
        },
        {
            "id": 261,
            "name": "上午班",
            "user_id": 14,
            "time_from": "2021-03-11",
            "time_to": "2021-03-11"
        }
    ]

其中晚班 time_fromtime_to 是跨日期。

希望通过time_fromtime_to进行分组。只要time_from和time_to有一个满足分组条件。就归到一类。
例如下面数据满足了time_from2021-03-10和time_to为2021-03-11,所以都归类到了2021-03-102021-03-11

{
    "id": 260,
    "name": "晚班",
    "user_id": 14,
    "time_from": "2021-03-10",
    "time_to": "2021-03-11"
}

最终得到如下格式

[
        {
            "date": "2021-03-10",
            "list": [
                {
                    "id": 255,
                    "name": "上午班",
                    "user_id": 14,
                    "time_from": "2021-03-10",
                    "time_to": "2021-03-10"
                },
                {
                    "id": 256,
                    "name": "下午班",
                    "user_id": 14,
                    "time_from": "2021-03-10",
                    "time_to": "2021-03-10"
                },
                {
                    "id": 260,
                    "name": "晚班",
                    "user_id": 14,
                    "time_from": "2021-03-10",
                    "time_to": "2021-03-11"
                }
            ]
        },
        {
            "date": "2021-03-11",
            "list": [
                {
                    "id": 260,
                    "name": "晚班",
                    "user_id": 14,
                    "time_from": "2021-03-10",
                    "time_to": "2021-03-11"
                },
                {
                    "id": 261,
                    "name": "上午班",
                    "user_id": 14,
                    "time_from": "2021-03-11",
                    "time_to": "2021-03-11"
                }
            ]
        }
    ]

如何转换

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橘虞初梦 2022-09-19 22:44:39
var arr = [
        {
            "id": 255,
            "name": "上午班",
            "user_id": 14,
            "time_from": "2021-03-10",
            "time_to": "2021-03-10"
        },
        {
            "id": 256,
            "name": "下午班",
            "user_id": 14,
            "time_from": "2021-03-10",
            "time_to": "2021-03-10"
        },
        {
            "id": 260,
            "name": "晚班",
            "user_id": 14,
            "time_from": "2021-03-10", // 跨日期
            "time_to": "2021-03-11" // 跨日期
        },
        {
            "id": 261,
            "name": "上午班",
            "user_id": 14,
            "time_from": "2021-03-11",
            "time_to": "2021-03-11"
        }
    ];

Object.entries(arr.reduce((res, item) => {
  addItem(res, item, 'time_from');
  addItem(res, item, 'time_to');
  return res;
}, {})).map(([date,value]) => ({date,list: value.list}));

function addItem(result, item, key) {
  const value = result[item[key]];
  if(value) {
    if(!value.ids.has(item.id)) {
      value.list.push(item);
      value.ids.add(item.id)
    }
  } else {
    result[item[key]] = {ids: new Set([item.id]), list: [item]}
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文