Нормализр установка нового свойства и группировка
У меня есть JSON, возвращающийся из моего API.
[{
"_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"
}
]
Сначала мне нужно разделить созданный объект OnOn (например, создан On.split("T")[0]) и установить новое свойство selectedDate, которое содержит строку только с датой. Затем я хочу классифицировать это на основе нового свойства createDate, а затем сгруппировать их в элементы, созданные в тот же день. Поэтому я пытаюсь получить структуру следующим образом.
{
"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,
])
но не работает. Как это сделать с нормализр.
1 ответ
Чтобы классифицировать объекты на основе только части даты созданной даты, вам нужно пройтись по каждому объекту и проанализировать дату создания (это 2-й вопрос). Я создал функцию, которая будет возвращать только дату. Вы можете изменить формат, есть и другие хорошие библиотеки 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)