【问题标题】:Choosing a root node based on key value根据键值选择根节点
【发布时间】:2019-09-05 18:50:28
【问题描述】:

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

{
  "name": "A1",
  "children": [
    {
      "name": "B1",
      "children": [
        {
          "name": "B1-C1",
          "value": 50
        }
      ]
    }
  ]
}

【问题讨论】:

  • 也许使用 d3.filter() ?

标签: javascript json d3.js


【解决方案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>

【讨论】:

  • 谢谢你 - 它非常适合我提供的示例。如果我需要搜索可能有很多层次的整个层次结构怎么办?例如,如果我需要找到一个名为 data.children.children 的名称?有没有办法进行深度查找?
  • 是的,有。只需在这里搜索,如果您没有找到任何内容,您可以发布一个新问题。但我很确定这样的问题已经存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多