javascript - 在不直接指定父级的情况下对平面数据进行分层

标签 javascript d3.js

我有以下格式的平面文件数据:

d1       | d2           | d3       | d4
-------------------------------------------
Heading  |              |          |
         | Subheading   |          |
         |              | Entry1   |
         |              | Entry2   |
         | Another sub  |          |
         |              | Entry3   |
         |              | Entry4   |
         |              |          | Subentry

我可以很好地阅读平面 dsv,并且如果可能的话,希望对其进行分层。我想知道是否可以在 .parentId() 内部访问以前的行并检查它是否是父级。

或者我编写自己的树函数?

最佳答案

所以我通过编写自己的树来使其工作,如下所示:

function tree(nodes) {
  var curr, parent, root;
  var lev = 1;

  nodes.forEach(function(d) {
    if (!root) {
      // handle root (first node)
      curr = {
        name:     d.d1,
        size:     1, //stub
        children: []
      };
      root   = curr;
      parent = curr;

    } else {

      if (d['d' + (lev+1)]) {
        // handle children
        lev = lev+1;
        parent = curr;

      } else if (d['d' + (lev-1)]) {
        // handle moving up the hierarchy
        lev = lev-1;
        parent = parent.parent;

      } else if (!d['d' + lev]) {
        // if it's neither child, nor moving up, nor a sibling, handle exception
        throw "unhandled tree level";
      }

      curr = {
        name:     d['d' + lev],
        size:     1, //stub
        children: []
      };
      curr.parent = parent;
      parent.children.push(curr);
    }
  });

  return root;
}

关于javascript - 在不直接指定父级的情况下对平面数据进行分层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478923/

相关文章:

javascript - React 将数组从父状态传递到子状态

JavaScript 正则表达式返回 0

javascript - 如何删除div内的svg

javascript - 如何在 svg 中创建交错的方形平铺图案?

svg - nvd3 图表 - x 轴标签

javascript - D3 条形图 Axis 怪癖

javascript - 原型(prototype)继承和instanceof

javascript - 使用 Javascript 在 HTML5 中重绘 Canvas

javascript - 双向绑定(bind)嵌套对象

javascript - Highcharts 对齐多个饼图