【问题标题】:How to group array of objects by object propery value? [duplicate]如何按对象属性值对对象数组进行分组? [复制]
【发布时间】:2020-03-14 19:49:06
【问题描述】:

我有这样的 JSON:

[
  {
    "id": 9,
    "job_id": 302,
    "user_id": 63,
    "message": "User message 1",
    "created_at": 1584091342
  },
  {
    "id": 10,
    "job_id": 302,
    "user_id": 63,
    "message": "User message 2",
    "created_at": 1584095994
  },
  {
    "id": 14,
    "job_id": 302,
    "user_id": 63,
    "message": "Hello",
    "created_at": 1584102257
  },
]

如何按日期对消息进行分组,像这样? (我正在使用 moment.js 来格式化 unix 时间戳)

【问题讨论】:

    标签: javascript arrays react-native grouping


    【解决方案1】:

    我们可以为此使用数组函数reduce:

    我们还需要将您的数据在几毫秒内转换为几天。

    const data = [
      {
        "id": 9,
        "job_id": 302,
        "user_id": 63,
        "message": "User message 1",
        "created_at": 1584130559280
      },
      {
        "id": 10,
        "job_id": 302,
        "user_id": 63,
        "message": "User message 2",
        "created_at": 1584130559280
      },
      {
        "id": 14,
        "job_id": 302,
        "user_id": 63,
        "message": "Hello",
        "created_at": 1584216959280
      },
      {
        "id": 15,
        "job_id": 302,
        "user_id": 63,
        "message": "World",
        "created_at": 1584216959280
      }  
    ]
    
    const groupedData = data.reduce((aggObj, child) => {
      const myDate = new Date(child.created_at);
      //console.log(myDate.toDateString());
      //console.log(myDate.getTime());
      if (aggObj.hasOwnProperty(myDate.toDateString())){
        aggObj[myDate.toDateString()].push(child);
      } else {
        aggObj[myDate.toDateString()] = [child];
      }    
      return aggObj
    }, {})
    
    console.log(groupedData);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    我更改了 created_at 值,所以前两条消息来自昨天,最后两条来自今天。

    输出是:

    {
      "Fri Mar 13 2020": [
        {
          "id": 9,
          "job_id": 302,
          "user_id": 63,
          "message": "User message 1",
          "created_at": 1584130559280
        },
        {
          "id": 10,
          "job_id": 302,
          "user_id": 63,
          "message": "User message 2",
          "created_at": 1584130559280
        }
      ],
      "Sat Mar 14 2020": [
        {
          "id": 14,
          "job_id": 302,
          "user_id": 63,
          "message": "Hello",
          "created_at": 1584216959280
        },
        {
          "id": 15,
          "job_id": 302,
          "user_id": 63,
          "message": "World",
          "created_at": 1584216959280
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 2022-03-17
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      相关资源
      最近更新 更多