[英]set a property's value with unknown depth within an object in javascript
[英]Constructively manipulating any value/object within a JSON tree of unknown depth
我有一個包含節點和子節點的JSON樹 - 格式為:
jsonObject =
{
id:nodeid_1,
children: [
{
id:nodeid_2,
children:[]
},
{
id:nodeid_3,
children:[
{
id:nodeid_4,
children:[]
},
{
id:nodeid_5,
children:[]
}
}
}
我不知道這棵樹的深度,一個節點能夠讓很多孩子也有很多孩子,等等。
我的問題是我需要使用nodeID將節點添加到此樹中。 例如,可以接受nodeID和節點對象(包括其子節點)的函數將能夠替換樹中的該節點 - 結果將成為更大的樹。
我只遇到遞歸函數,允許我遍歷JSON樹中的所有節點,我對其中一個函數的修改返回我的節點對象 - 但不能幫助我,因為我需要修改原始樹:
var findNode = {
node:{},
find:function(nodeID,jsonObj) {
if( typeof jsonObj == "object" ) {
$.each(jsonObj, function(k,v) {
if(v == nodeID) {
findNode.node = $(jsonObj).eq(0).toArray()[0];
} else {
findNode.find(nodeID,v);
}
});
} else {
//console.log("jsobObj is not an object");
}
}
}
這允許我做以下測試:
findNode.find("nodeid_3",json);
alert(findNode.node);
總結一下 - 如何修改具有未知深度的JSON樹的值?
提前致謝
如果要像您所說的那樣修改節點,則只需修改該節點的屬性即可。
var node = findNode.find("nodeid_3",json);
node.id = "nodeid_3_modified";
node.children = [];
另外,你為什么要使用jQuery呢?
這是一個不使用jQuery應該工作的替代方案:
function findNode(object, nodeId) {
if (object.id === nodeId) return object;
var result;
for (var i = 0; i < object.children.length; i++) {
result = findNode(object.children[i], nodeId);
if (result !== undefined) return result;
}
}
那不是JSON ,它是一個Javascript對象文字。 JSON是將簡單的Javascript對象編碼為字符串的某種方式; 你的例子不是那樣寫的。 此外,您的代碼不會操縱JSON對象(實際上是字符串,而不是對象); 它操縱Javascript對象(這是一種更簡單的任務)。
也就是說,我不確定你的實際問題是什么,但如果是關於向children
數組添加新元素,你可以使用Array.push :
findNode.find("nodeid_3",json);
findNode.node.children.push(child);
(這假設findNode.find實際上有效,我很確定它沒有。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.