Javascript 遍历JSON树并操作其数据/结构
我试图创建一个可以遍历JSON树并更改其数据/结构的函数。我设法使它遍历到每个节点并读取数据,但仍坚持更改其数据/结构部分Javascript 遍历JSON树并操作其数据/结构,javascript,jquery,json,Javascript,Jquery,Json,我试图创建一个可以遍历JSON树并更改其数据/结构的函数。我设法使它遍历到每个节点并读取数据,但仍坚持更改其数据/结构部分 function jsonTraverser(tree){ $.each(tree, function(index, val){ if(val.tag == 'button'){ delete val[index]; } if(val.children){ jsonTra
function jsonTraverser(tree){
$.each(tree, function(index, val){
if(val.tag == 'button'){
delete val[index];
}
if(val.children){
jsonTraverser(val.children);
}
})
}
jsonTraverser(json_obj);
从上面的代码中,它应该删除标记为等于按钮的JSON节点。虽然它似乎可以工作,但它不会删除节点,而更改其标记则可以正常工作。你有解决这个问题的办法吗
PS:如果您需要JSON树的示例,请看这里
[
{"tag":"div","id":"0","class":"sgph","children":[
{"tag":"div","data-scoretype":"","class":"sgi","id":"1","children":[
{"tag":"button","data-btnrole":"satis_group","class":"up","html":"ขึ้น"},
{"tag":"button","data-btnrole":"satis_group","class":"down","html":"ลง"},
{"tag":"button","data-btnrole":"satis_group","class":"edit","html":"เปลี่ยนกลุ่ม"},
{"tag":"button","data-btnrole":"satis_group","class":"del","html":"ลบกลุ่ม"}
]},
{"tag":"div","class":"scph","children":[
{"tag":"button","data-btnrole":"score_type","class":"add","html":"เกณฑ์การให้คะแนน"}
]},
{"tag":"div","class":"stph","children":[
{"tag":"div","class":"sti","id":"3","children":[
{"tag":"button","data-btnrole":"satis_topics","class":"up","html":"ขึ้น"},
{"tag":"button","data-btnrole":"satis_topics","class":"down","html":"ลง"},
{"tag":"button","data-btnrole":"satis_topics","class":"edit","html":"เปลี่ยนหัวข้อ"},
{"tag":"button","data-btnrole":"satis_topics","class":"del","html":"ลบหัวข้อ"}
]},
{"tag":"button","data-btnrole":"satis_topics","class":"add","html":"เพิ่มหัวข้อ"}
]}
]},
{"tag":"div","id":"1","class":"sgph","children":[
{"tag":"button","data-btnrole":"satis_group","class":"add","html":"เพิ่มกลุ่ม"}
]}
]
你把几个变量名拼错了。例如,“v”应该是“val”。 jsonTraverse还应该从树中删除,而不是从val中删除,因为树包含子项列表
function jsonTraverser(tree){
$.each(tree, function(index, val){
if(val.tag == 'button'){
delete tree[index];
}
if(val.children){
jsonTraverser(val.children);
}
})
}
请注意,您必须处理根本身具有标记“button”的情况。v.children或val.children?val[i]什么都不是,val包含诸如“tag”之类的命名属性