当前位置: 首页 > 面试题库 >

D3:使用嵌套功能将带有父键的平面数据转换为层次结构

云文栋
2023-03-14
问题内容

我敢肯定有一种非常简单而优雅的方法可以做到这一点,但是我不太清楚。我有一些看起来像这样的输入数据

[
{id: 1, name: "Peter"},
{id: 2, name: "Paul", manager: 1},
{id: 3, name: "Mary", manager: 1},
{id: 4, name: "John", manager: 2},
{id: 5, name: "Jane", manager: 2}
]

如果可能,我想使用d3.js嵌套运算符来获取要在层次结构布局中使用的结构。像这样:

[ 
   {name: "Peter", children: [
          {name:"Paul", children: [
              {name:"John"},
              {name:"Jane"}
          ]},
          {name:"Mary"}
      ]
   }
]

问题答案:

您不能在此处使用nest运算符,因为嵌套会产生固定的层次结构:输出层次结构中的级别数与您指定的键函数的数量相同。

也就是说,您可以编写自己的函数来生成树。假设根节点是输入数组中的第一个节点,则可以创建从id到节点的映射,然后懒惰地构造树。

function tree(nodes) {
  var nodeById = {};

  // Index the nodes by id, in case they come out of order.
  nodes.forEach(function(d) {
    nodeById[d.id] = d;
  });

  // Lazily compute children.
  nodes.forEach(function(d) {
    if ("manager" in d) {
      var manager = nodeById[d.manager];
      if (manager.children) manager.children.push(d);
      else manager.children = [d];
    }
  });

  return nodes[0];
}

如果您知道节点是按顺序列出的,以使管理人员出现在报告之前,则可以简化代码以仅重复一次。



 类似资料:
  • 问题内容: 使用MSSQL 2008和XQUERY 考虑以下存储在表中的XML: 我想将此xml分解为类似 等等。 注意:在此示例中,每个ParentElement可能有许多ChildElements。我一直在尝试使用xquery,但是我无法像这样浏览复杂的元素。 基本上,我正尝试与FOR XML对表进行完全相反的操作,只是要使用一组更为简单的数据。 关于下一步或如何实现此目标的任何想法? 谢谢

  • 输入 json : 预期输出: 我想有一个颠簸转换,它可以嵌套很少的田地。

  • 我正在尝试使用Jolt将平面结构映射到层次结构http://jolt-demo.appspot.com/#andrewkcarter2: 我的输入是一个包含客户详细信息的平面结构:下面是我的JSON输入: 这是我的 JOLT 规格: 我得到的结果是: 在上面的输出中,我们看到帐户1001和1002重复交易的次数。我不希望这种情况发生,我希望交易被归类在各自的账户下。 所以,我想要的输出应该是: 类

  • 我试着从前面的一个类似问题中调整一些代码,但是我的尝试似乎是没有希望的,因为它甚至没有从'activity'表中提取任何信息,但是它在'cstactivity'表中创建了'attid'字段,我想我最终可以达到这个目的,以便跨表进行连接/链接。唯一的问题是它实际上没有用相关的ID填充这个! 但理想情况下,我只想转换数据,以便导入仅包括“activity”节点上相关行中嵌套节点中的所有内容。 要导入的

  • 我有一个关于使用jolt将平面json转换成嵌套json的问题。我对jolt很陌生,这是我的意见 我编写了jolt spec,但我没有得到想要的输出 我的预期产出是: 任何震动专家都可以帮助我获得所需的输出。我应该在颠簸中使用多个变换,还是可以在一个震动变压器中获得所需的输出?

  • 几天来,我一直在考虑这个“简单”的练习,结果被困住了。我都快疯了。我需要将嵌套数组转换为HTML。下面是数组的示例: 而预期的结果应该是这样的: 我已经从一个helper函数开始(从数组创建每个标记),下面是它现在的样子: 到目前为止还不错。当我试图创建实际的HTML构建器函数时,这个棘手的部分就开始了。我想迭代数组的每个元素,检查它是否有一个嵌套的元素(子),保存指定的标记,再深入一些。 到目前