Как я могу уничтожить свойства объекта без изменения исходного массива? - PullRequest
1 голос
/ 16 мая 2019

Попытка удалить аналогичные свойства из объекта массива, но при этом выдается ошибка, заблокированная переменная области видимости не может быть повторно объявлена, как я могу удалить аналогичные свойства из объектов, используя любой лучший подход без изменения исходного массива?

main.js

const loggerResponse = transformedResponse.map(({ drugName, mailPrice,retailPrice, ...rest  }) => {
    const { copayEmployer, ...mailPriceRest } = mailPrice;
    const { copayEmployer, ...retailPriceRest } = retailPrice;
    return { ...rest, mailPrice: mailPriceRest , retailPrice: retailPriceRest};
  })

transformedResponse

[
    {
        "isBrand": true,
        "drugName": "Lipitor",
        "drugStrength": "80 mg",
        "drugForm": "Tablet",
        "mailPrice": {
            "copayEmployer": 0,
            "prop2": "test"
        },
        "retialPrice": {
            "copayEmployer": 0,
            "prop2": "test"
        }

    }, {
        "isBrand": true,
        "drugName": "Metformin",
        "drugStrength": "500 mg",
        "drugForm": "Tablet",
        "mailPrice": {
            "copayEmployer": 50,
            "prop2": "test"
        },
        "retailPrice": {
            "copayEmployer": 0,
            "prop2": "test"
        }
    }

]

ожидаемый результат

[
    {
        "isBrand": true,
        "drugStrength": "80 mg",
        "drugForm": "Tablet",
        "mailPrice": {
            "prop2": "test"
        },
        "retialPrice": {
            "prop2": "test"
        }

    }, {
        "isBrand": true,
        "drugStrength": "500 mg",
        "drugForm": "Tablet",
        "mailPrice": {
            "prop2": "test"
        },
        "retailPrice": {
            "prop2": "test"
        }
    }

]

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Как насчет этого решения?

const loggerResponse = function transform (originalArray) {
  originalArray.map( element => {
    delete element.drugName;
    delete element.mailPrice.copayEmployer;
    delete element.retialPrice.copayEmployer;
   });

  return originalArray;
}

const expectedArray = loggerResponse(transformedResponse);
console.log(expectedArray);

Конечно, вы можете клонировать исходный массив, если вам это нужно.И обратите внимание, что простое клонирование с помощью таких методов, как slice(), оператор распространения и т. Д., Не приведет к его глубокому клонированию, однако этого можно достичь с помощью следующего кода:

const deepClone = JSON.parse(JSON.stringify(transformedResponse));

Затем вы можете выполнить всеоперации с клонированным массивом, не касаясь исходного.

0 голосов
/ 16 мая 2019

На самом деле ваш подход великолепен, но вам нужно немного изменить, попробуйте клонировать объект, а не использовать его напрямую, как:

const loggerResponse = transformedResponse.map(({ drugName, mailPrice, retailPrice, ...rest  }) => {
  const { copayEmployer, ...mailPriceRest } = mailPrice || {};
  const { copayEmployer: copayEmployerRetail, ...retailPriceRest } = retailPrice || {};
  return { ...rest, mailPrice: { ...mailPriceRest, copayEmployer } , retailPrice: { ...retailPriceRest, copayEmployer: copayEmployerRetail }};
})

Это должно сработать.

...