Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将平面阵列转换为分层阵列_Javascript_D3.js_Hierarchical Data - Fatal编程技术网

Javascript 将平面阵列转换为分层阵列

Javascript 将平面阵列转换为分层阵列,javascript,d3.js,hierarchical-data,Javascript,D3.js,Hierarchical Data,我在将平面列表转换为层次结构时遇到一些问题。 我试图从下面的数据中可视化d3.js树形图。 每个节点都有两个子对象,如famsarray中所述 我在这里发现了与我的问题类似的问题,但我无法让它与两个父节点一起工作 这就是我想要归档的内容 我希望有人能给我指出正确的方向,提前谢谢 let nodes = [ { id: 'N001', fam: 'F001' }, { id: 'N002', fam: 'F002' }, { id: 'N003', fam: 'F003' }, { id: 'N0

我在将平面列表转换为层次结构时遇到一些问题。 我试图从下面的数据中可视化d3.js树形图。 每个节点都有两个子对象,如
fams
array中所述

我在这里发现了与我的问题类似的问题,但我无法让它与两个父节点一起工作

这就是我想要归档的内容

我希望有人能给我指出正确的方向,提前谢谢

let nodes = [
{ id: 'N001', fam: 'F001' },
{ id: 'N002', fam: 'F002' },
{ id: 'N003', fam: 'F003' },
{ id: 'N004', fam: 'F004' },
{ id: 'N005', fam: 'F005' },
{ id: 'N006', fam: 'F006' },
{ id: 'N007', fam: 'F007' },
{ id: 'N008', fam: 'F008' },
{ id: 'N009', fam: 'F009' },
{ id: 'N010', fam: 'F010' },
{ id: 'N011', fam: 'F011' }
];

let fams = [
{ id: 'F001', p1: 'N002', p2: 'N003' },
{ id: 'F002', p1: 'N004', p2: 'N005' },
{ id: 'F003', p1: 'N006', p2: 'N007' },
{ id: 'F004', p1: 'N008', p2: 'N009' },
{ id: 'F005', p1: 'N010', p2: 'N011' }
];

// Expected output
let finalData = [
{
id: 'N001',
children: [
  {
    id: 'N002',
    fam: 'F002',
    children: [
      {
        id: 'N004',
        fam: 'F004',
        children: [
          { id: 'N008', fam: 'F008' },
          { id: 'N009', fam: 'F009' }
        ]
      },
      {
        id: 'N005',
        fam: 'F005',
        children: [
          { id: 'N010', fam: 'F010' },
          { id: 'N011', fam: 'F011' }
        ]
      }
    ]
  },
  {
    id: 'N003',
    fam: 'F003',
    children: [
      { id: 'N006', fam: 'F006' },
      { id: 'N007', fam: 'F007' }
    ]
  }
]
}
];

一种可能的解决方案是循环
节点
数组,根据
fams
,创建一个新属性(
parentId
),该属性描述父属性(
null
,如果没有):

之后,使用
d3.stratify()
创建层次结构将非常简单:

const stratify = d3.stratify()(nodes);
以下是演示(使用浏览器的控制台检查结果,而不是s.O.代码段控制台):

let节点=[{
id:'N001',
fam:'F001'
},
{
id:'N002',
fam:'F002'
},
{
id:'N003',
fam:'F003'
},
{
id:'N004',
fam:'F004'
},
{
id:'N005',
fam:'F005'
},
{
id:'N006',
fam:'F006'
},
{
id:'N007',
fam:'F007'
},
{
id:'N008',
fam:'F008'
},
{
id:'N009',
fam:'F009'
},
{
id:'N010',
fam:'F010'
},
{
id:'N011',
fam:'F011'
}
];
让fams=[{
id:'F001',
p1:‘N002’,
p2:‘N003’
},
{
id:'F002',
p1:‘N004’,
p2:‘N005’
},
{
id:'F003',
p1:‘N006’,
p2:‘N007’
},
{
id:'F004',
p1:‘N008’,
p2:‘N009’
},
{
id:'F005',
p1:‘N010’,
p2:‘N011’
}
];
nodes.forEach(函数(d){
常量fam=fams.find(函数(e){
返回e.p1==d.id | | e.p2==d.id
});
d、 parentId=fam?nodes.find(函数(e){
返回e.fam==fam.id;
}).id:null;
});
const stratify=d3.stratify()(节点);
console.log(分层)

一种可能的解决方案是循环
节点
数组,根据
fams
,创建一个新属性(
parentId
),该属性描述父属性(
null
,如果没有):

之后,使用
d3.stratify()
创建层次结构将非常简单:

const stratify = d3.stratify()(nodes);
以下是演示(使用浏览器的控制台检查结果,而不是s.O.代码段控制台):

let节点=[{
id:'N001',
fam:'F001'
},
{
id:'N002',
fam:'F002'
},
{
id:'N003',
fam:'F003'
},
{
id:'N004',
fam:'F004'
},
{
id:'N005',
fam:'F005'
},
{
id:'N006',
fam:'F006'
},
{
id:'N007',
fam:'F007'
},
{
id:'N008',
fam:'F008'
},
{
id:'N009',
fam:'F009'
},
{
id:'N010',
fam:'F010'
},
{
id:'N011',
fam:'F011'
}
];
让fams=[{
id:'F001',
p1:‘N002’,
p2:‘N003’
},
{
id:'F002',
p1:‘N004’,
p2:‘N005’
},
{
id:'F003',
p1:‘N006’,
p2:‘N007’
},
{
id:'F004',
p1:‘N008’,
p2:‘N009’
},
{
id:'F005',
p1:‘N010’,
p2:‘N011’
}
];
nodes.forEach(函数(d){
常量fam=fams.find(函数(e){
返回e.p1==d.id | | e.p2==d.id
});
d、 parentId=fam?nodes.find(函数(e){
返回e.fam==fam.id;
}).id:null;
});
const stratify=d3.stratify()(节点);
console.log(分层)

您似乎忘记添加您遇到问题的代码了。。?另外请注意,这个问题与。无关:祝贺D3问题编号35000。不管什么原因,人类都喜欢这些整数。看起来你忘记添加你遇到问题的代码了。。?另外请注意,这个问题与。无关:祝贺D3问题编号35000。不管什么原因,人类都喜欢这些整数。