我从我的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执行此操作。
答案 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)