将组织结构图映射到哈希表

时间:2017-07-23 04:01:02

标签: javascript arrays hashtable

嘿所有我正在尝试获取一组对象(员工)并将它们映射到一个新对象,以便描绘组织的层次结构。因此,每个经理都会有一个密钥和一个附加到密钥的数组,其中包含所有报告的名称。

我不确定为什么我无法将我的员工姓名推送到各自经理的阵列。这似乎将我的对象键设置为数组而不是1,2,3,4。

任何指针都会受到赞赏。

Repl.it:https://repl.it/JeMh/2

let data = [
  { 
    name: 'ceo',
    id: 1,
    mgr: null,
  },
  {
    name: 'vp1',
    id: 2,
    mgr: 1,
  },
  {
    name: 'vp2',
    id:3,
    mgr: 1,
  },
  {
    name: 'mgr',
    id:4,
    mgr: 2,
  },
];

function displayOrg(data) {
  let org = {};
  for(let i = 0; i < data.length; i++) {
    let current = data[i];
    for(let key in current){
      if(org[key] !== current.id || current.mgr){
        org[current.id] = []
      }
    }
    for(let key in org){
      console.log(current.mgr);
      console.log(org[key])
      if(current.mgr === org[key]){
        console.log("THIS HAPPEN");
        org[key].push(current.name);
      }
    }
  }
  return org;
}


displayOrg(data);

expected resulted: { '1': [vp1,vp2], '2': [mgr], '3': [], '4': [] }

1 个答案:

答案 0 :(得分:0)

看起来非常直接:

function getMngd(data, mngrId){
  return data.filter(emp => emp.mgr === mngrId).map(emp => emp.name)
}

data.reduce((p,c)=>{
 const {id} = c;
 p[id] = getMngd(data, id);
 return p;
},{})