Javascript链接的对象:如何在链的末尾添加元素?

时间:2018-08-01 18:40:34

标签: javascript

考虑下面的链接对象和给定的代码

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!!!

如何在最后一个子对象中添加新项?

4 个答案:

答案 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); 

https://jsfiddle.net/q89vt6mn/3/