Как удалить свойство из оператора распространения? - PullRequest
1 голос
/ 15 мая 2019

Я хочу удалить drugName из ответа, но у меня нет идеи, как удалить свойство из оператора распространения? main.js

  const transformedResponse = transformResponse(response);
  const loggerResponse = {...transformedResponse};
  delete loggerResponse[drugName];
  console.log("LOGGER>>>>", loggerResponse);
  logger().info('Drug Price Response=', { ...loggerResponse, memberId: memberId, pharmacyId: pharmacyId });

\ данные

LOGGER>>>> {
    '0': {
        isBrand: false,
        drugName: 'test drug',
        drugStrength: '5 mg 1 5 mg',
        drugForm: 'Tablet',
    }
}

transformResponse

[{
    drugName: 'HYDROCODONE-HOMATROPINE MBR',
    drugStrength: '5MG-1.5MG',
    drugForm: 'TABLET',
    brand: false
}]

Ответы [ 3 ]

4 голосов
/ 15 мая 2019

Вы можете использовать Синтаксис Rest в Object Destructuring , чтобы получить все свойства, кроме drugName, в rest переменную, подобную этой:

const transformedResponse = [{
    drugName: 'HYDROCODONE-HOMATROPINE MBR',
    drugStrength: '5MG-1.5MG',
    drugForm: 'TABLET',
    brand: false
},
{
    drugName: 'HYDROCODONE ABC',
    drugStrength: '10MG',
    drugForm: 'SYRUP',
    brand: true
}]

const output = transformedResponse.map(({ drugName, ...rest }) => rest)

console.log(output)

Кроме того, когда вы распределяете массив внутри {}, вы получаете объект с индексами массива в качестве ключа и значениями массива в качестве значения.Вот почему вы получаете объект с 0 в качестве ключа loggerResponse:

const array = [{ id: 1 }, { id: 2 }]
console.log({ ...array })
1 голос
/ 15 мая 2019

Другой вариант - написать универсальную функцию, removeKey -

const removeKey = (k, { [k]:_, ...o }) =>
  o

const values =
  [ { a: 1, x: 1 }
  , { a: 1, y: 1 }
  , { a: 1, z: 1 }
  ]

console .log (values .map (v => removeKey ("a", v)))
// [ { x: 1 }, { y: 1 }, { z: 1 } ]

Функция может быть легко адаптирована для удаления нескольких клавиш, при необходимости -

const removeKey = (k = "", { [k]:_, ...o } = {}) =>
  o

const removeKeys = (keys = [], o = {}) =>
  keys .reduce ((r, k) => removeKey (k, r), o)

const values =
  [ { a: 1, x: 1 }
  , { a: 1, y: 1 }
  , { a: 1, z: 1 }
  ]

console .log (values .map (v => removeKeys (['a', 'z'], v)))
// [ { x: 1 }, { y: 1 }, {} ]
0 голосов
/ 15 мая 2019

Если у вас есть свойство drugName в каждом объекте массива transformedResponse, вы можете использовать Array.map () для создания нового массива без свойства drugName:

Пример:

const transformedResponse = [
  {
    drugName: 'HYDROCODONE-HOMATROPINE MBR',
    drugStrength: '5MG-1.5MG',
    drugForm: 'TABLET',
    brand: false
  },
  {
    drugName: 'TEST',
    drugStrength: '7MG-1.9MG',
    drugForm: 'TABLET',
    brand: false
  }
];

const loggerResponse = transformedResponse.map(o =>
{
    let clone = Object.assign({}, o);
    return (delete clone.drugName, clone);
});

console.log(loggerResponse);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...