问答

日期多条件分组疑惑

作者:admin 2021-04-20 我要评论

原始数据 const arr = [ { "id": 255, "name": "上午班", "user_id": 14, "time_from": "2021-03-10", "time_to": "2021-03-10" }, { "id": 256, "name": "下午...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

原始数据

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"
                }
            ]
        }
    ]

如何转换

###
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]}
  }
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器