如何在TypeScript中修改复杂JSON数据并移除指定属性
TypeScript中移除JSON对象数组内指定属性并保留完整结构的实现方法
你需要处理给定的JSON数据,移除criteria数组中每个对象的processType属性,但之前的代码仅返回了criteria部分数据,而非完整的JSON结构。以下是具体的解决方法:
原始JSON数据
{"actions": {"canUpdateAbc": true,"canUpdateXyz": true},"criteria": [{"criteriaType": {"code": "CCode","value": "C Code"},"processType": {"code": "PType","value": "C"},"values": ["123456"]},{"criteriaType": {"code": "ACode","value": "A Code"},"processType": {"code": "PType","value": "R"},"values": ["567890"]}],"outcome": {"code": "create","value": "Always create"},"unlessCriteria": []}
期望输出JSON
{"actions": {"canUpdateAbc": true,"canUpdateXyz": true},"criteria": [{"criteriaType": {"code": "CCode","value": "C Code"},"values": ["123456"]},{"criteriaType": {"code": "ACode","value": "A Code"},"values": ["567890"]}],"outcome": {"code": "create","value": "Always create"},"unlessCriteria": []}
你尝试的代码
const rules = rule.criteria?.map((m) => {m.processType = undefined;return m;});
问题原因
你的代码仅处理了criteria数组并将结果赋值给rules变量,但没有将处理后的criteria放回原对象的完整结构中,因此只能得到criteria部分数据。
解决方案
方法1:直接修改原对象(允许修改原始数据时使用)
遍历criteria数组,直接删除每个对象的processType属性,原对象会被更新为完整的目标结构:
// 遍历criteria数组,删除每个对象的processType属性 rule.criteria?.forEach(item => { delete item.processType; }); // 此时rule即为处理后的完整JSON对象 console.log(rule);
方法2:创建新对象(不修改原始数据,推荐使用)
通过对象扩展运算符解构原对象,替换criteria为处理后的数组,避免修改原数据产生副作用:
// 解构原对象,生成新的处理后对象 const updatedRule = { ...rule, criteria: rule.criteria?.map(item => { // 解构每个criteria对象,排除processType属性 const { processType, ...rest } = item; return rest; }) || [] // 处理criteria为undefined的边界情况 }; // updatedRule就是符合要求的完整JSON对象 console.log(updatedRule);
内容的提问来源于stack exchange,提问作者Somashekhar
相关产品推荐
相关产品推荐

