除splice外从JSON对象数组中移除对象的替代方案咨询
解决方案
方案1:使用delete操作符(直接按键名删除)
JavaScript原生提供delete操作符,专门用于删除对象的指定键名属性,完全不依赖属性顺序,稳定性高。
// 1. 先将后端返回的JSON字符串转为JS对象 const apiRes = JSON.parse(yourJavaApiReturnJsonStr); // 2. 按键名删除指定属性,直接修改原对象 // 删除phone字段 delete apiRes.payload.phone; // 删除contact字段 delete apiRes.payload.contact; // 3. 处理后转为JSON字符串发POST请求即可 const postData = JSON.stringify(apiRes);
注意:delete会直接修改原对象,如果多测试场景需要复用原始返回值,建议先拷贝原对象再执行删除。
方案2:解构赋值生成新对象(不修改原对象,更适合多测试场景)
如果不想改动原始返回对象,可以用ES6+的解构赋值语法剔除不需要的属性,各测试场景之间完全不会互相干扰:
const apiRes = JSON.parse(yourJavaApiReturnJsonStr); // 剔除payload下的phone属性,生成新的payload对象 const { phone, ...newPayload } = apiRes.payload; // 构造新的请求对象,原apiRes完全不会被修改 const postData = JSON.stringify({ payload: newPayload }); // 下一个测试场景可直接复用原始apiRes,比如剔除contact字段 const { contact, ...payloadWithoutContact } = apiRes.payload; const postData2 = JSON.stringify({payload: payloadWithoutContact});
方案3:封装通用批量剔除工具函数
如果经常需要批量删除多个指定键,可以封装复用的工具函数:
/** * 剔除对象中指定的多个键,返回新对象 * @param {Object} obj 原始对象 * @param {Array} keysToOmit 要剔除的键名数组 * @returns {Object} 剔除后的新对象 */ function omitKeys(obj, keysToOmit) { return Object.fromEntries( Object.entries(obj).filter(([key]) => !keysToOmit.includes(key)) ) } // 使用示例:同时删除payload下的phone和contact两个字段 const apiRes = JSON.parse(yourJavaApiReturnJsonStr); const processedPayload = omitKeys(apiRes.payload, ['phone', 'contact']); const postData = JSON.stringify({payload: processedPayload});
额外说明:splice是JavaScript数组的原生方法,仅适用于数组元素操作,本身不支持处理普通对象的属性删除,之前的资料存在认知偏差。
内容的提问来源于stack exchange,提问作者hungryhippos
相关产品推荐
相关产品推荐

