如何递归修改下面结构的'_children'属性名改为'children'
var data = {
'_children': [{
'_children': [{
'_children': []
},
{
'_children': []
},
{
'_children': []
},
{
'_children': []
}]
},
{
'_children': []
},
{
'_children': []
},
{
'_children': []
}]
}
function dataFormat(data) {
if (data._children) {
data.children = data._children
delete data._children
if (data.children.length) {
_.each(data.children, (item) => {
dataFormat(item)
})
}
}
}
我写了上面的方法,结果可以,但是我对自己写的这个方法比较迷惑: 当数据量大的时候,这种方法是否可行? 这种方法属于递归吗? 对递归比较迷惑,似乎这个方法中没写递归的终止条件什么的?
18 回复
这个效率偏低,哥给你一个高效的
let str = JSON.stringify(data)
/*
"{"_children":[{"_children":[{"_children":[]},{"_children":[]},{"_children":[]},{"_children":[]}]},{"_children":[]},{"_children":[]},{"_children":[]}]}"
*/
str = str.replace(/{"_children":/g, '{"children":')
data = JSON.parse(str)
😄 拿走不谢
=================================== My Blog : http://39.108.115.22
@gyj1278 对象中存储一个引用的键所占用的空间是很小的,当然对大小有要求的话还是删掉比较好。上面那个转字符串替换的,把那么大个对象遍历一下生成字符串再替换,然后又eval回去,性能明显会十分低下