在修改函数中的对象时出现意外结果
我了解到我必须item passed to the function在更改它并返回它之前克隆它,并且它适用于上述示例,但是当我在我的递归代码代码中尝试它时,它没有t 工作,这是一个示例:
如您所见,我打算更新该属性,B如果它存在,如果它不存在,我想创建一个属性 B 然后给它最后一个值,但由于某种原因,这失败了!,当然,如果我之前创建了属性 B手(在递归调用它之前),我可以给它赋值,但我不知道为什么需要这样做或者为什么我当前的代码不起作用!
function addB(item) {
let newItem = { ...item };
if (newItem.B) {
newItem.B.value = "I am B";
} else {
newItem.B = {
value: "I am B"
};
}
if (newItem.children) {
newItem.children.forEach(child => {
//if you uncomment the code below, the code works!
//child.B = {};
child = addB(child);
});
}
return newItem;
}
function App() {
let parent = {
id: 0,
children: [
{
id: 1,
children: [
{
id: 3
},
{
id: 4
}
]
},
{
id: 2
}
]
};
parent = addB(parent);
console.log(parent);
}
电流输出:
预期输出:
jeck猫
相关分类