почему бы тебе не сделать это так:
function Directory(p_id, p_name){
this.name = p_name;
this.id = p_id;
this.subdir = [];
}
Directory.prototype.addSubDir(p_directory){
this.subdir.push(p_directory);
}
то где-то в вашем коде сделайте это:
var arr_struc = ...;//[your data]
var dir_mem = [];
var rootDir = new Directory(0, 'ROOT')
dir_mem.push(rootDir);
for(var i = 0; i < arr_struc.length; i++){
var tmp_directory = new Directory(i+1, arr_struc[i].name)
dir_mem.push(tmp_directory);
if(!arr_struc[i].parent_id)
{ rootDir.addSubDir(tmp_directory) }
else
{ dir_mem[arr_struc[i].parent_id].addSubDir(tmp_directory) }
}
добавив некоторые другие методы для чтения подкаталогов по идентификатору или simular и вернув «это», вы сможете получить подкаталоги с помощью цепочки методов;) довольно стиль OO, но я думаю, что это хороший способ структурировать код
Надеюсь, это помогло в вашем конкретном случае
РЕДАКТИРОВАТЬ: вот пример привязки методов к вашему подкаталогу:
Directory.prototype.getSubDirs(){
return this.subDir;
}
Directory.prototype.getSubDirById(p_id){
var allSubDirs = this.getSubDirs();
for(var i = 0; i < allSubDirs.length; i++){
if(allSubDirs[i].id === p_id) return allSubDirs[i];
}
return false;
}
Directory.prototype.getSubDirByName(p_name){
var allSubDirs = this.getSubDirs();
for(var i = 0; i < allSubDirs.length; i++){
if(allSubDirs[i].name === p_name) return allSubDirs[i];
}
return false;
}
Тогда вы можете сделать:
rootDir.getSubDirByName('parent').getSubDirByName('child').getSubDirByName('grandchild A');
или что-то в этом роде :) -безумный
person
Max Bumaye
schedule
14.11.2014