繁体   English   中英

如何在不更改原始数组的情况下破坏对象属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM