我想创建一个未知对象的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
对象附加为的子级b
,而不是 的子级a
?我难住了。
这是它的 JSFiddle,请检查您的控制台以获取结果。 http://jsfiddle.net/winduptoy/Mjq5D/2/