如何用JavaScript实现从含嵌套的对象中移除指定键并返回新对象
嵌套对象指定键剔除函数实现
原有代码问题
- 初始化存储结果的
newObj为数组,需求返回的是对象类型 - 直接用
for...of遍历普通对象会报错,普通对象不属于可迭代对象,需要遍历对象的自有属性键 - 未添加嵌套对象的递归处理逻辑
- 循环内部提前写了return,会导致遍历只执行一次就直接返回结果
最终实现代码
function omit(obj, keys) { // 入参类型校验,避免非对象入参引发报错 if (typeof obj !== 'object' || obj === null) return obj; const newObj = {}; // 遍历当前对象的自有属性 for (const key in obj) { if (obj.hasOwnProperty(key)) { // 当前键属于要剔除的列表,直接跳过 if (keys.includes(key)) continue; const currentValue = obj[key]; // 属性值为对象时递归处理 if (typeof currentValue === 'object' && currentValue !== null) { const nestedRes = omit(currentValue, keys); // 嵌套对象处理后无剩余属性,赋值为空字符串 newObj[key] = Object.keys(nestedRes).length === 0 ? '' : nestedRes; } else { // 普通类型值直接赋值 newObj[key] = currentValue; } } } return newObj; }
功能验证
使用给出的测试用例验证:
var x = { key1: true, key2: 2, key3: { nested1: 'JavaScript' } }; // 测试用例1 console.log(omit(x, ['key2', 'key3'])); // 输出结果:{ key1: true } // 测试用例2 console.log(omit(x, ['nested1'])); // 输出结果:{ key1: true, key2: 2, key3: '' }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

