【发布时间】:2019-08-31 10:30:25
【问题描述】:
关注Unexpected outcome when modifying an object in a function
我了解到我必须先克隆item passed to the function,然后再更改它并返回它,它适用于上述示例,但是当我在我的递归代码代码中尝试它时,它不起作用,这是一个示例显示这个:
如您所见,我打算更新属性 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);
}
【问题讨论】:
标签: javascript reactjs