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

如何通过路径数组删除JavaScript嵌套对象的指定属性?

解决嵌套对象按路径删除属性的问题

这个场景我太熟悉了!直接用forEach遍历整个路径数组的话,最后你拿到的是要删除的属性值(比如这里的10),而不是它的父容器obj.a.b.c,当然没法执行删除操作。核心思路是:先导航到目标属性的父对象,再删除目标属性。

方法一:用for循环(直观易理解)

这种方式逻辑最清晰,遍历路径的前length-1个元素,定位到父对象后,再删除最后一个路径对应的属性:

const path = ["a", "b", "c", "d"];
let obj = {"a": {"b": {"c": {"d": 10, "e": 20 }}}};

// 初始化当前对象为根节点
let current = obj;
// 遍历路径的前3个元素(a、b、c)
for (let i = 0; i < path.length - 1; i++) {
  // 提前判断,避免路径不存在时报错
  if (!current) break;
  current = current[path[i]];
}

// 确保父对象存在,再删除目标属性
if (current) {
  delete current[path[path.length - 1]];
}

console.log(obj); // 输出:{"a": {"b": {"c": {"e": 20 }}}}

方法二:用forEach实现(满足你的遍历需求)

如果一定要用forEach,可以在遍历的时候通过索引判断是否是最后一个元素:前面的元素用来导航到父对象,最后一个元素执行删除操作:

const path = ["a", "b", "c", "d"];
let obj = {"a": {"b": {"c": {"d": 10, "e": 20 }}}};

let current = obj;
path.forEach((key, index) => {
  // 路径不存在时直接退出,避免报错
  if (!current) return;
  
  if (index === path.length - 1) {
    // 最后一个路径元素,执行删除
    delete current[key];
    return;
  }
  // 非最后一个元素,继续导航到下一层
  current = current[key];
});

console.log(obj); // 输出:{"a": {"b": {"c": {"e": 20 }}}}

注意事项

  • 一定要加current存在性判断,防止路径中的某个key不存在时,代码抛出Cannot read properties of undefined的错误。
  • delete操作只会删除对象的属性,如果目标属性不存在,delete会返回true(不会报错),所以不用额外判断属性是否存在。

内容的提问来源于stack exchange,提问作者jezrael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:35:15