Как я могу уничтожить свойства объекта без изменения исходного массива?

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

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));

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


Есть идеи?

10000