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

时间:2019-12-16 19:26:57

标签: javascript arrays object spread-syntax

我有一个对象,在获取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'
    }
  ]
}

然后也许得到Paul或Joe的

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

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

对吗?

但是深度是可变的(不是未知的而是可变的)怎么办?

我该怎么做?

谢谢

1 个答案:

答案 0 :(得分: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);