考虑下面的链接对象和给定的代码
let data = {
item: "0001",
child: {
item: "00011",
child: {
item: "000111",
child: {
item: "0001111",
child: {
item: "00011111",
child: null
}
}
}
}
};
// Add item to last child of data
let last = data.child;
while (last !== null) last = chain.child;
// Add this item as last in chain
last = {
item: "9999",
child: null
};
console.log(data); // Same original data. No effect at all!!!
如何在最后一个子对象中添加新项?
答案 0 :(得分:2)
您需要检查下一个子元素,因为需要一个子属性来分配对象。
let data = {
item: "0001",
child: {
item: "00011",
child: {
item: "000111",
child: {
item: "0001111",
child: {
item: "00011111",
child: null
}
}
}
}
};
let last = data; // start with data
while (last.child !== null) { // check the child
last = last.child; // assig child for check of the child's child
}
last.child = { item: "9999", child: null }; // assign new object to a property for
// keeping the reference
console.log(data); // Same original data. No effect at all!!!
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
您可能打算采取其他方式:
while (last.child !== null) last = last.child;
这将设置您,以便将last.child
设为null
,并且您将能够正确地分配last.child = {item: "9999", child: null};
由于您要保留last
作为参考指针,因此您不想将其重新分配给新对象。这样,您可以导航到最后一个子项,并将其子项分配给您的对象。
答案 2 :(得分:0)
您在此处创建了一个新对象,而不是在变量last
中编辑当前对象:
last = {
item: "9999",
child: null
};
如果要更改属性,则需要使用.
表示法,例如
last.child = {item:"9999",child:null};
答案 3 :(得分:0)
您可以使用递归:
let data = {
item: "0001",
child: {
item: "00011",
child: {
item: "000111",
child: {
item: "0001111",
child: {
item: "00011111",
child: null
}
}
}
}
};
let run = function(node, addNode){
if(node.child === null){
node.child = addNode
return;
}
return run(node.child, addNode)
}
last = {
item: "9999",
child: null
};
run(data, last)
console.log(data);