【发布时间】:2017-07-27 14:09:20
【问题描述】:
我想创建一个未知对象的JSON层次结构,所以必须递归处理。
这是我的函数,其中angular.element.isEmptyObject() 继承自 jQuery,angular.copy() 是一个创建对象深层副本的函数(我使用的是AngularJS)。
function recurseTree(tree, newKey, newId) {
if(angular.element.isEmptyObject(tree)) {
tree[newKey] = {_id: newId};
} else {
for(var key in tree) {
if(typeof tree[key] == 'object') recurseTree(tree[key], newKey, newId);
else tree[newKey] = {_id: newId};
}
}
return angular.copy(tree);
}
现在运行这个:
var testT = {};
console.log(recurseTree(testT, 'a', '1'));
console.log(recurseTree(testT, 'b', '2'));
console.log(recurseTree(testT, 'c', '3'));
console.log(recurseTree(testT, 'd', '4'));
console.log(recurseTree(testT, 'e', '5'));
您会注意到第一个和第二个按预期返回:
{
a: {
_id: '1',
b: {
_id: '2'
}
}
}
但是第三个是我遇到麻烦的地方。
{
a: {
_id: '1',
b: {
_id: '2',
c: {
_id: '3'
}
},
c: {
_id: '3'
}
}
}
我需要解决什么问题才能将c 对象附加为ONLY 作为b 的子对象,而不是作为a 的子对象?我被难住了。
这是一个运行中的 JSFiddle,请检查您的控制台以获取结果。 http://jsfiddle.net/winduptoy/Mjq5D/2/
【问题讨论】:
-
你能把工作的jsfiddle.net 和所有的依赖库放在一起吗?
-
哎呀,抱歉我忘记了,我把它加到问题的底部了。
标签: javascript recursion