2016-06-29 3 views
0

구조체가 "id, name, parent_name"인 객체 목록이 있고 결과적으로 이름이있는 트리를 가져와야합니다.구조체를 트리 구조로 배열

예는 :

var employees = []; 

var kirk = new Person(uuid(), 'Kirk', null); 
employees.push(kirk); 

var mark = new Person(uuid(), 'Mark', kirk); 
employees.push(mark); 

var tom1 = new Person(uuid(), 'Tom', mark); 
employees.push(tom1); 

var nick = new Person(uuid(), 'Nick', tom1); 
employees.push(nick); 

var ben = new Person(uuid(), 'Ben', tom1); 
employees.push(ben); 

var david = new Person(uuid(), 'David', ben); 
employees.push(david); 

var stacey = new Person(uuid(), 'Stacey', nick); 
employees.push(stacey); 

var corey = new Person(uuid(), 'Corey', nick); 
employees.push(corey); 

var tom2 = new Person(uuid(), 'Tom', stacey); 
employees.push(tom2); 

var julie = new Person(uuid(), 'Julie', stacey); 
employees.push(julie); 

직원은 내 펼치기 목록이며,이 당신이 원하는 경우에 나는 Kirk{Mark{Tom{Ben{David},Nick{Corey,Stacey{Julie,Tom}}}}}

답변

0

같은 결과 확인하시기 바랍니다가 필요합니다

function uuid() { 
 
    function s4() { 
 
    return Math.floor((1 + Math.random()) * 0x10000) 
 
     .toString(16) 
 
     .substring(1); 
 
    } 
 
    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + 
 
    s4() + '-' + s4() + s4() + s4(); 
 
} 
 

 
var Person = function(id, name, parent_name) { 
 
\t this.id = id; 
 
    this.name = name, 
 
    this.parent_name = parent_name; 
 
    this.sub = []; 
 
    
 
    this.addSubPerson = function(person) { 
 
    \t this.sub.unshift(person); //Chnaged from 'push' to 'unshift' 
 
    return person; 
 
    }; 
 
    
 
    this.subPersons = function() { 
 
    if(this.sub.length) { \t 
 
    \t var result = []; 
 
     for(var i in this.sub) { 
 
      result.push(this.sub[i].subPersons()); 
 
     } 
 
    \t \t return this.name + '{'+ result.join(',') + '}'; 
 
    }else { 
 
    \t return this.name; 
 
    } 
 
    }; 
 
}; 
 

 
var employees = []; 
 

 
var kirk = new Person(uuid(), 'Kirk', null); 
 
employees.push(kirk); 
 

 
var mark = new Person(uuid(), 'Mark', kirk); 
 
employees.push(mark); 
 

 
var tom1 = new Person(uuid(), 'Tom', mark); 
 
employees.push(tom1); 
 

 
var nick = new Person(uuid(), 'Nick', tom1); 
 
employees.push(nick); 
 

 
var ben = new Person(uuid(), 'Ben', tom1); 
 
employees.push(ben); 
 

 
var david = new Person(uuid(), 'David', ben); 
 
employees.push(david); 
 

 
var stacey = new Person(uuid(), 'Stacey', nick); 
 
employees.push(stacey); 
 

 
var corey = new Person(uuid(), 'Corey', nick); 
 
employees.push(corey); 
 

 
var tom2 = new Person(uuid(), 'Tom', stacey); 
 
employees.push(tom2); 
 

 
var julie = new Person(uuid(), 'Julie', stacey); 
 
employees.push(julie); 
 

 
for(var i in employees) { 
 
\t var employee = employees[i]; 
 
    if(employee.parent_name != null) { 
 
    \t employee.parent_name.addSubPerson(employee); \t 
 
    } 
 
} 
 

 
console.log(kirk.subPersons());

+0

감사합니다. 빠른 응답을 위해. 그러나이 질문에서 언급했듯이 예상되는 대답은 Kirk {Mark {Tom {Ben {David}, Nick {Corey, Stacey {Julie, Tom}}}}와 일치해야하며 결과는 이제 Kirk {Mark {Tom {Nick {Stacey {Tom, Julie}, Corey}, Ben {David}}}} – Ash

+0

함수가 이미 정의되어 있습니다.함수 generateTree (직원) { var ceo = null; // 마지막에는 PersonTreeNode 객체 여야합니다. var managers = []; 은 // 코드는 가 \t 은 // 코드가 여기 반환 대표 이사 ENDS 여기서 시작; }; 함수에서 flattend 목록을 'employees'매개 변수로 가져옵니다. 여기에는 이미 id와 같은 다른 모든 값이 정의되어 있습니다. 끝 결과를 Kirk {Mark {Tom {Ben {David}, Nick {Corey, Stacey {Julie, Tom}}}}로 가져오고이 문자열은 ceo 변수에 있어야합니다. – Ash

+0

결과는 동일합니다. 그러나 명령은 다릅니다. 그러나 귀하의 결과와 일치하도록 코드를 변경했습니다. 스 니펫을 확인하십시오. –

관련 문제