Избегание метаданных при добавлении объекта к другому объекту в JavaScript - PullRequest
0 голосов
/ 31 октября 2018

Я хотел бы эффективно добавить свойство, которое является объектом, в документ (который также является объектом), прежде чем отправлять окончательный документ в ответ пользователю.

Новое свойство, которое я хочу добавить, в основном берет последний объект в массиве с именем «history», который находится в корне документа, и заполняет его свойством под названием «activeStatus», также в корне документа. .

Для этого я попытался использовать Object.assign примерно так:

if (doc) {
  const appendedDoc = Object.assign({ activeStatus: doc.history.slice(-1)[0] }, doc);
  doc = appendedDoc;
} 
res.send(doc);

Но я получаю дополнительные метаданные в своем окончательном документе - включая получателей, статус строгого режима и т. Д.

Как я могу сделать это так, чтобы вернуть чистый документ, который я хочу.

Кстати, мой первоначальный документ выглядит так:

{
    "_id": <id value>,
    "type": "permanent",
    "gender": "female",
    "history": [
        {
            "endDate": "2018-10-31T12:27:17.721Z",
            "stage": "training",
            "completed": true,
            "startDate": "2018-10-30T13:41:18.714Z"
        },
        {
            "stage": "active",
            "completed": false,
            "startDate": "2018-10-31T12:27:17.572Z"
        }
    ]
}

И вот документ, который я хочу изготовить:

{
    "_id": <id value>,
    "type": "permanent",
    "gender": "female",
    "history": [
        {
            "endDate": "2018-10-31T12:27:17.721Z",
            "stage": "training",
            "completed": true,
            "startDate": "2018-10-30T13:41:18.714Z"
        },
        {
            "stage": "employed",
            "completed": false,
            "startDate": "2018-10-31T12:27:17.572Z"
        }
    ],
    "activeStatus": {
            "stage": "employed",
            "completed": false,
            "startDate": "2018-10-31T12:27:17.572Z"
    }
}

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете сериализовать + десериализовать, чтобы получить только обычные свойства:

 if (doc) {
   doc = Object.assign({ activeStatus: doc.history.slice(-1)[0] }, JSON.parse(JSON.stringify(doc)));
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...