根据键值选择根节点

时间:2019-09-05 18:50:28

标签: javascript json d3.js

是否可以基于JSON键值选择d3.hierarchy根节点?例如,我希望以下JSON对象中的根节点为“ B1”而不是“ A1”-我需要能够基于name

的值访问此节点
{
  "name": "A1",
  "children": [
    {
      "name": "B1",
      "children": [
        {
          "name": "B1-C1",
          "value": 50
        }
      ]
    }
  ]
}

1 个答案:

答案 0 :(得分:1)

这里的解决方案涉及纯JavaScript,不需要D3方法。

如您所知,d3.hierarchy ...

  

根据指定的层次结构数据构建根节点。指定的数据必须是代表根节点的对象。

话虽如此,您只需要指定正确的对象即可。

例如,使用整个对象(而不是您想要的对象):

const data = {
  "name": "A1",
  "children": [
    {
      "name": "B1",
      "children": [
        {
          "name": "B1-C1",
          "value": 50
        }
      ]
    }
  ]
};

const root = d3.hierarchy(data);

console.log(root)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

现在,让我们获取所需的对象。这可以通过Array.prototype.find轻松完成:

const root = d3.hierarchy(data.children.find(d => d.name === "B1"));

这是演示:

const data = {
  "name": "A1",
  "children": [{
    "name": "B1",
    "children": [{
      "name": "B1-C1",
      "value": 50
    }]
  }]
};

const root = d3.hierarchy(data.children.find(d => d.name === "B1"));

console.log(root)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

相关问题