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

如何在JavaScript中将嵌套对象转换为对象数组并重置__parent属性?

如何将带__parent嵌套的对象转为父属性为null的对象数组?

这个需求其实挺常见的,我来给你分享一个简单靠谱的实现方式,用循环遍历的方法既直观,还能避免递归可能带来的栈溢出问题(尤其是对象层级很深的时候)。

实现思路

我们可以从传入的对象开始,逐层向上遍历每个__parent指向的父对象:

  1. 每次遍历都创建当前对象的副本,把副本里的__parent属性直接设为null
  2. 将处理好的副本加入结果数组
  3. 把当前遍历的对象切换为它的__parent,直到没有父对象为止

代码实现

function flattenNestedParents(obj) {
  const result = [];
  let current = obj;
  while (current) {
    // 浅拷贝当前对象,并替换__parent为null
    const flattenedObj = { ...current, __parent: null };
    result.push(flattenedObj);
    // 移动到父对象继续处理
    current = current.__parent;
  }
  return result;
}

测试示例

用你给出的示例对象测试一下:

const category = { id: 1, title: "a", level: 2, __parent: { id: 2, title: "b", level: 1, __parent: { id: 3, title: "c", level: 0 } } };

// 调用函数
const flattenedArray = flattenNestedParents(category);
console.log(flattenedArray);

输出结果完全符合你的期望:

[{ id: 1, title: "a", level: 2, __parent: null }, { id: 2, title: "b", level: 1, __parent: null }, { id: 3, title: "c", level: 0, __parent:null }]

补充说明

  • 如果你的对象里包含其他复杂嵌套结构(不是__parent这种层级),需要深拷贝的话,可以把浅拷贝换成JSON.parse(JSON.stringify(current)),再修改__parent为null,但要注意这种方式无法处理函数、Symbol等不可序列化的内容。
  • 循环的方式比递归更稳妥,即使对象层级非常深,也不会出现栈溢出的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:32:33