【问题标题】:Add to nested object with variable depth添加到具有可变深度的嵌套对象
【发布时间】:2025-12-02 12:20:04
【问题描述】:

我有一个对象,当我获取 api 时,它的深度可能会增加。

假设它是一个有孩子的父母,它最初看起来像这样。

{
  name: 'Mary'
  children: [
    {name: 'Jude'},
    {name: 'Kathy'},
    {name: 'Joe'}
  ]
}

现在我想获取 API 并获取 Kathy 的孩子

响应是凯西和她的孩子的对象

假设:

{
  name: 'Kathy',
  children: [
    {name: 'April'},
    {name: 'Suzanne'},
    {name: 'Paul'}
  ]
}

所以我想最终拥有

{
  name: 'Mary'
  children: [
    {
      name: 'Jude'
    },
    {
      name: 'Kathy',
      children: [
        {name: 'April'},
        {name: 'Suzanne'},
        {name: 'Paul'}
      ]
    },
    {
      name: 'Joe'
    }
  ]
}

也许然后得到保罗或乔的

如果我事先知道深度,我可以做第一个例子

newObj = { ...oldObj, children: { ...oldObj.children, ...apiResponse }}

对吗?

但是当深度是可变的(不是未知的而是可变的)时呢?

我该怎么做?

谢谢

【问题讨论】:

  • 如果您知道Kathyindex,那么只需object.children[index] = yourNewObject
  • @r3wt 我知道Kathy的索引,但是Kathy不一定在第一层。我可以让凯西深埋几个层次,比如 object.children[index].children[index1].children[index2]。所以即使我知道index和index1和index2以及有多少层深,我也不知道怎么用代码写出来
  • 然后显示您的完整代码
  • @r3wt 我刚刚用更好的解释编辑了我的评论。我没有完整的代码,我正在尝试制作一个对象
  • 你没有提供足够的细节来回答你的问题,因此我投票结束。

标签: javascript arrays object spread-syntax


【解决方案1】:

这样的?

function find(name, node) {

	if (node.name == name){
	  return node;
  }
  
  if (node.children) {
  	for(const child of node.children){
    	const match = find(name, child);
      if(match){
      	return match;
      }
    }
  }
  
  return null;
}

const root =  {
  name: 'Mary',
  children: [
    {name: 'Jude'},
    {name: 'Kathy'},
    {name: 'Joe'}
  ]
};

const match = find("Kathy",root);

const fullNode = {
  name: 'Kathy',
  children: [
    {name: 'April'},
    {name: 'Suzanne'},
    {name: 'Paul'}
  ]
}

Object.assign(match, fullNode);

console.log(root);

【讨论】: