normalizr设置新属性并对

时间:2017-11-14 18:26:40

标签: json react-redux normalizr

我从我的API返回了JSON。

[{
        "_id": "id1",
        "userId": "u1",
        "createdOn": "2017-11-13T19:24:05.269Z"
    }, {
        "_id": "id2",
        "userId": "u2",
        "createdOn": "2017-11-13T19:23:59.777Z"
    }, {
        "_id": "id3",
        "userId": "u3",
        "createdOn": "2017-11-09T17:34:14.507Z"
    }, {
        "_id": "id4",
        "userId": "u4",
        "createdOn": "2017-11-08T18:15:54.303Z"
    }
]

首先我需要拆分createdOn(如createdOn.split(" T")[0])并设置一个新属性createdDate,它包含一个仅限日期的字符串。然后我想根据新属性createdDate对其进行分类,然后将它们分组到同一日期创建的项目中。所以我试图得到如下结构。

{
    "history": {
        "2017-11-08": {
            "id4": {
                "_id": "id4",
                "userId": "u4",
                "createdOn": "2017-11-08T18:15:54.303Z",
                "createdDate": "2017-11-08"
            }
        },
        "2017-11-09": {
            "id3": {
                "_id": "id3",
                "userId": "u3",
                "createdOn": "2017-11-09T17:34:14.507Z",
                "createdDate": "2017-11-09"
            }
        },
        "2017-11-13": {
            "id1": {
                "_id": "id1",
                "userId": "u1",
                "createdOn": "2017-11-13T19:24:05.269Z",
                "createdDate": "2017-11-13"
            },
            "id2": {
                "_id": "id2",
                "userId": "u2",
                "createdOn": "2017-11-13T19:23:59.777Z",
                "createdDate": "2017-11-13"
            }
        }
    }
}

我尝试了使用' processStrategy'(用于分割日期时间字符串)和多个模式的不同选项

     export const historySchema = new schema.Entity(
      "history",
      {},
      { idAttribute: "_id" },
    );

    export const historyGroupingSchema = new schema.Entity(
      "history",
      { el: [historySchema] },
      { idAttribute: "createdDate" },
    );

normalize(history, [
      historyGroupingSchema,
    ])

但不起作用。如何使用normalizr执行此操作。

1 个答案:

答案 0 :(得分:0)

要根据创建日期的日期部分对对象进行分类,您需要遍历每个对象并解析创建的日期(这是第二个问题)我创建了一个只返回日期的函数。您可以更改格式,还有其他优秀的js库,特别是momentjs 解析日期后,您可以循环数组并获取具有相同日期的对象

var p=[{
        "_id": "id1",
        "userId": "u1",
        "createdOn": "2017-11-13T19:24:05.269Z"
    }, {
        "_id": "id2",
        "userId": "u2",
        "createdOn": "2017-11-13T19:23:59.777Z"
    }, {
        "_id": "id3",
        "userId": "u3",
        "createdOn": "2017-11-09T17:34:14.507Z"
    }, {
        "_id": "id4",
        "userId": "u4",
        "createdOn": "2017-11-08T18:15:54.303Z"
    }
];

  function getDatepart(createdOn)
  {
    var dateFieldValue= new Date(createdOn)
    var year = dateFieldValue.getFullYear()+"";
    var month = (dateFieldValue.getMonth()+1)+"";
    var day = dateFieldValue.getDate()+"";
    var dateFormat = year + "-" + month + "-" + day;//use your format
    console.log(dateFormat)
    return dateFormat;
    
  }
  getDatepart(p[0].createdOn)