我想从响应中删除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
}]
答案 0 :(得分:8)
const loggerResponse = {
"0": {
isBrand: false,
drugName: "test drug",
drugStrength: "5 mg 1 5 mg",
drugForm: "Tablet",
},
};
const { drugName, ...newResponse } = loggerResponse["0"];
console.log(newResponse);
答案 1 :(得分:4)
您可以使用Rest syntax in 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 })
答案 2 :(得分:3)
const myObject = {
a: 1,
b: 2,
c: 3
};
const {
a,
...noA
} = myObject;
console.log(noA); // => { b: 2, c: 3 }
答案 3 :(得分:1)
另一种选择是编写通用函数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 }, {} ]
答案 4 :(得分:1)
这是我发现的最简洁和一成不变的方式。您只需将对象分解为两部分:一部分是您要删除的属性(在这种情况下为drugName
),另一部分是您要保留的对象的其余部分({{ 1}})。
完成此操作后,可以放弃已删除的属性,放弃原始对象,并使用具有所有剩余字段的新对象(在这种情况下为drugWithoutName
)。
想出语法不是很明显,但是一旦看到它就很有意义:
drugWithoutName
这些文章进一步解释了这个概念:
https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90
https://github.com/airbnb/javascript/blob/master/README.md#objects--rest-spread
答案 5 :(得分:0)
如果在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;}
答案 6 :(得分:0)
您可以使用展开运算符并简单地将 undefined
分配给您不需要的键:
const output = transformedResponse.map((response) => ({
...response,
drugName: undefined
}))