![](/img/trans.png)
[英]how to add object in nested array of objects without mutating original source
[英]How do i destruct object properties without mutating original array?
试图从数组对象中删除类似属性,但无法重新声明抛出错误的作用域变量,我如何使用任何更好的方法从对象中删除类似属性,而无需更改原始数组?
main.js
const loggerResponse = transformedResponse.map(({ drugName, mailPrice,retailPrice, ...rest }) => {
const { copayEmployer, ...mailPriceRest } = mailPrice;
const { copayEmployer, ...retailPriceRest } = retailPrice;
return { ...rest, mailPrice: mailPriceRest , retailPrice: retailPriceRest};
})
TransformationResponse
[
{
"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"
}
}
]
实际上,您的方法很棒,但是您需要进行一些更改,请尝试克隆对象而不是直接使用它,就像:
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()
,spread运算符等方法进行克隆将不会对其进行深入克隆,但是您可以使用以下代码来实现:
const deepClone = JSON.parse(JSON.stringify(transformedResponse));
然后,您可以在克隆的阵列上执行所有操作,而无需触摸原始阵列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.