javascript替换n元树对象中的属性名
Supose我有一个n元树结构(json格式),如下所示:javascript替换n元树对象中的属性名,javascript,Javascript,Supose我有一个n元树结构(json格式),如下所示: [ { “文本”:“一些标题”, “儿童”:[ { “文本”:“一些标题”, “儿童”:[ ... ] }, ... ] } ] 我既不知道节点将有多少子节点,也不知道树的深度 我想做的是在所有子级中将属性的名称text更改为name 我尝试过使用递归函数func: func(树){ 如果(!tree)返回; for(树的let节点){ node.name=node.text 删除node.text; 返回函数(节点子节点); }
[
{
“文本”:“一些标题”,
“儿童”:[
{
“文本”:“一些标题”,
“儿童”:[
...
]
},
...
]
}
]
我既不知道节点将有多少子节点,也不知道树的深度
我想做的是在所有子级中将属性的名称text
更改为name
我尝试过使用递归函数func
:
func(树){
如果(!tree)返回;
for(树的let节点){
node.name=node.text
删除node.text;
返回函数(节点子节点);
}
}
但它不起作用。我该怎么做呢?我想说,您的代码的主要问题是,
节点
变量保存相应数组项的值,并且它不保留对这些项本身的引用,因此,基本上,您尝试进行的变异永远不会应用于原始数组(但仅限于在每次循环迭代时重新分配的临时变量)
如果您更喜欢对原始数组进行变异,并愿意为此使用for(
-loop),那么最好使用for(…in
-loop)通过其键访问数组项:
const src=[
{
文字:“一些标题”,
儿童:[
{
文字:“一些标题”,
儿童:[]
},
]
}
],
func=树=>{
for(树中的常量nodeIdx){
const{text:name,children}=tree[nodeIdx]
func(儿童)
树[nodeIdx]={name,children}
}
}
func(src)
console.log(src)
。作为控制台包装{min height:100%;}
您将在此处使用in运算符
for (let node **in** tree) {
node.name = node.text
delete node.text;
return func(node.children);
}
这不是json。json是一种文本格式。这里有一个JavaScript对象literal.um,实际的函数是什么?似乎缺少了部分。抱歉,刚刚更新。