javascript - 将一组平面记录(带有父键)转换为嵌套结构?

标签 javascript for-loop

我需要一个 JS 循环来将对象数组更改为 json 对象。这是对象的示例数组:

var employees= [
  {name:"Jeff",manager:null,title:"The Pres"},
  {name:"Amy",manager:"Aaron",title:"lll"},
  {name:"Chris",manager:"Aaron",title:"lll"},
  {name:"Dana",manager:"Aaron",title:"lll"},
  {name:"Joe",manager:"Aaron",title:"lll"},
  {name:"Mike",manager:"Aaron",title:"lll"},
  {name:"Aaron",manager:"Jeff",title:"lll"}
];

这是预期的 json 对象:

var json = {
    name:"Jeff",
    title:"The Pres",
    children:[{
        name:"Aaron",
        title:"some title",
        children[
            {name:"Amy",title:"some title",children[]},
            {name:"Chris",title:"some title",children:[]},
            {name:"Dana",title:"some title",children:[]},
            {name:"Joe",title:"some title",children:[]},
            {name:"Mike",title:"some title",children:[]
        }]
    }]
};

但这超出了我的范围。

最佳答案

var employees= [
  {name:"Jeff",manager:null,title:"The Pres"},
  {name:"Amy",manager:"Aaron",title:"lll"},
  {name:"Chris",manager:"Aaron",title:"lll"},
  {name:"Dana",manager:"Aaron",title:"lll"},
  {name:"Joe",manager:"Aaron",title:"lll"},
  {name:"Mike",manager:"Aaron",title:"lll"},
  {name:"Aaron",manager:"Jeff",title:"lll"}
];

​var hash = {};
var root;

for (var i = 0; i < employees.length; i++) {
    var employee = employees[i];
    hash[employee.name] = {
        name:employee.name, manager:employee.manager, title:employee.title, children: []
    };
}
for (var i = 0; i < employees.length; i++) {
    var employee = hash[employees[i].name];
    var manager = hash[employee.manager];
    if (manager) {
        manager.children.push(employee);
    } else {
        root = employee;
    }
}
// root is the employee without a manager

JsFiddle

关于javascript - 将一组平面记录(带有父键)转换为嵌套结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286831/

相关文章:

ios - 在 for 循环中创建的 UIButtons 的特定位置

Java:合取不等式的最少运算次数?

javascript - 为什么我们在 javascript for 循环中使用 -1 ?

javascript - 如何使用 href 在选项卡之间切换?

javascript - 是否可以在 react 中强制一个组件在另一个组件内使用?

for-loop - gnuplot:for和columnheader命令

r - 替代 R 中的循环

javascript - 本地存储中的高分 - Javascript

javascript - 返回值后如何链接方法?

javascript - 添加记录到 Ext.data.ArrayStore