【问题标题】:normalizr setting a new property and groupingnormalizr 设置新属性和分组
【发布时间】:2018-04-27 19:38:27
【问题描述】:

我有一个从我的 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 执行此操作。

【问题讨论】:

    标签: json react-redux normalizr


    【解决方案1】:

    要仅根据创建日期的日期部分对对象进行分类,您需要遍历每个对象并解析创建日期(这是第二个问题),我创建了一个仅返回日期的函数。您可以更改格式还有其他很好的 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)

    【讨论】:

    • 我正在尝试通过 normalizr[github.com/paularmstrong/normalizr] 来完成这项工作,对于获取日期组件,我提到的对我来说已经足够了(用“T”分割并取第一个元素)
    猜你喜欢
    • 2018-04-26
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多