Нормализр установка нового свойства и группировка

У меня есть 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)

Другие вопросы по тегам