添加到具有可变深度的嵌套 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);
我有一个 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);