将平面记录集(使用父键)转换为嵌套结构? [英] Convert a flat set of records (with parent key) to a nested structure?

查看:110
本文介绍了将平面记录集(使用父键)转换为嵌套结构?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一个JS循环来将一个对象数组转换成一个json对象。这里是对象的示例数组:

  var employees = [
{name:Jeff,manager:null ,标题:Pres,
{name:Amy,经理:Aaron,标题:lll},
{姓名:Chris,经理:Aaron标题:lll},
{name:Dana,经理:Aaron,标题:lll},
{姓名:Joe,经理:Aaron lll},
{name:Mike,经理:Aaron,标题:lll},
{name:Aaron,经理:Jeff,标题:lll }
];

这是预期的json对象:

  var json = {
name:Jeff,
title:Pres,
children:[{
name: Aaron,
title:some title,
children [
{name:Amy,title:some title,children []},
{name: 克里斯,标题:一些标题,儿童:[]},
{名称:Dana,标题:一些标题,子女:[]},
{名称: ,title:some title,children:[]},
{name:Mike,title:some title,children:[]
}]
}]
};

但它超出了我的范围。

解决方案

  var employees = [
{name:Jeff,manager:null,title:Pres},
{name:Amy,经理:Aaron,标题:lll},
{name:Chris,经理:Aaron,标题:lll},
:Dana,经理:Aaron,标题:lll},
{姓名:Joe,经理:Aaron,标题:lll},
{name: Mike,经理:Aaron,标题:lll},
{name:Aaron,经理:Jeff,标题:lll}
];

var hash = {};
var root;

(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是没有经理的员工
$ / code $ / pre

JsFiddle


I need a JS loop to change an array of objects into a json object. Here is the sample array of objects:

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"}
];

Here is the expected json object:

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:[]
        }]
    }]
};

but it is beyond me.

解决方案

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

这篇关于将平面记录集(使用父键)转换为嵌套结构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆