首页 > 解决方案 > 添加到具有可变深度的嵌套对象

问题描述

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

对?

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

我该怎么做?

谢谢

标签: javascriptarraysobjectspread-syntax

解决方案


像这样的东西?

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


推荐阅读