【发布时间】:2013-12-12 03:44:56
【问题描述】:
我正在尝试创建一个函数,该函数将生成一个树状结构,这样每个项目都包含对其父项目的引用。
我有一个在创建孩子时调用自身的函数,但我很难使用它,似乎一旦从内部调用它this 仍然指的是顶级项目而不是当前项目。
记录以控制台项目是什么我可以看到,当比第一级更深时,父项总是指链中的第一项(或不存在)。它创建了树,但是除了第一个之外的项目对父级的引用都丢失了。
var Item = function (item, parent) {
console.log('item is :' + item.name);
this.parent = parent;
console.log('parent is: ' + parent);
var fields = _.union(_.keys(item), _.keys(this.parent));
_.each(_.without(fields, ['parent','children']), function (prop) {
this[prop] = angular.isDefined(item[prop]) ? item[prop] : this.parent[prop];
}, this);
this.children = [];
if (item.children) {
this.children = _.map(item.children, function (child) {
console.log('this is : ' + this);
return new Item(child, this)
}, this);
}
};
var tree = new Item(root, {});
有点麻烦,但这里有一些示例数据:
var root = JSON.parse('{"id":"1","name":"root item","root":"1","lft":"1","rgt":"22","level":"1","type":
"category","parent_id":"1","deadline":null,
"children":[
{"id":"2","name":"item 1","root":"1","lft":"14","rgt":"15","level":"2","type":"category","parent_id":"1"},
{"id":"6","name":"item 2","root":"1","lft":"16","rgt":"19","level":"2","type":"category","parent_id":"1"},
{"id":"10","name":"item 3","root":"1","lft":"20","rgt":"21","level":"2","type":"item","parent_id":"1"}]}');
【问题讨论】:
-
只是一个错字,我一直在尝试并忘记在发布之前将其更改回来。在这里修好了,问题还是一样。
-
你能用一些虚拟数据为此创建小提琴吗?
-
当然,可能需要几分钟才能完成。谢谢。
-
这是一个小提琴:jsfiddle.net/eRbhm/2
标签: javascript recursion tree