javascript - 添加到具有可变深度的嵌套对象
问题描述
我有一个对象,当我获取 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 }}
对?
但是当深度是可变的(不是未知的而是可变的)时呢?
我该怎么做?
谢谢
解决方案
像这样的东西?
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);
推荐阅读
- javascript - 是否可以在表达式中使用 return 语句?
- mongodb - MongoDB - 更新以展平每个文档的内部数组数组
- javascript - JSON 我尝试打印的所有内容都未定义
- docker - 入口点:“entrypoint.sh” - docker compose
- c++ - CryptQueryObject 的新替代品是什么,因为它已被弃用
- python - 在列表中切片数据
- email-attachments - 将文件作为附件发送电子邮件的命令
- java - 如何以sql表中显示的格式获取日期?
- laravel - Laravel 应用部署时显示错误的图像源
- jquery - jQuery-file-upload:如何根据每个文件大小发送单独的请求