You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:06:02