添加到具有可变深度的嵌套 object

Add to nested object with variable depth

我有一个 object,当我获取 api 时,其深度可能会增加。

假设它是 parent 和 children 最初看起来像这样。

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

现在我想获取 API 并获取 Kathy 的 children

回复是 object 凯西和她 children

假设:

{
  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'
    }
  ]
}

也许然后得到 Paul 或 Joe 的

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

newObj = { ...oldObj, children: { ...oldObj.children, ...api响应}}

对吗?

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

我该怎么做?

谢谢

是这样的吗?

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);