Попытка удалить аналогичные свойства из объекта массива, но это приводит к тому, что переменная области видимости заблокированной ошибки не может быть повторно объявлена, как я могу удалить подобные свойства из объектов, используя любой лучший подход, не изменяя исходный массив?
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 ответа
На самом деле ваш подход великолепен, но вам нужно внести небольшие изменения, попробуйте клонировать объект, а не использовать его напрямую, например:
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 }};
})
Это должно сделать свое дело.
Как насчет этого решения?
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));
Затем вы можете выполнить все операции с клонированным массивом, не касаясь исходного.