javascript - 使用 D3 跳转 JSON

标签 javascript json d3.js nested

我正在 D3 上进行可视化,感觉一定有一种方法可以实现我想要做的事情。

假设我有这样的 JSON:

var arr = [
    {
        "name":"John",
        "maxAge": 35,
        "info":[
            {
                "age":31,
                "height":6,
                "weight":155,
                "eyes":"green"
            },
            {
                "age":35,
                "height":6,
                "weight":165,
                "eyes":"green"
            }
        ]
    },
    {
        "name":"Eric",
        "maxAge":30,
        "info":[
            {
                "age":29,
                "height":5,
                "weight":135,
                "eyes":"brown"
            },
            {
                "age":30,
                "height":5,
                "weight":155,
                "eyes":"brown"
            }
        ]
    }
]

假设我正在使用如下方式循环数据:

var outerDiv = d3.select("body")
    .selectAll("div")
    .data(arr)
    .enter()
    .append("div")
    .attr("class","outerDiv");

为 John 和 Eric 创建外部 div,然后:

var innerDivs = outerDiv.selectAll("p")
    .data((d) => arr.info)
    .enter()
    .append("p")
    .html("Weight = " + info.weight)
    .attr("class","outerDiv");

循环遍历每个信息并将其可视化。但是,我的可视化要求 1)我可以在循环“info”时访问 maxAge,2)我可以在 info[0] 中访问 info[1].height。这两种情况都可能吗?

最佳答案

您的两个要求都是可能的。使用d3Selection.each

这是一个演示 -

var arr = [
    {
        "name":"John",
        "maxAge": 35,
        "info":[
            {
                "age":31,
                "height":6,
                "weight":155,
                "eyes":"green"
            },
            {
                "age":35,
                "height":6,
                "weight":165,
                "eyes":"green"
            }
        ]
    },
    {
        "name":"Eric",
        "maxAge":30,
        "info":[
            {
                "age":29,
                "height":5,
                "weight":135,
                "eyes":"brown"
            },
            {
                "age":30,
                "height":5,
                "weight":155,
                "eyes":"brown"
            }
        ]
    }
]

var outerDiv = d3.select("body")
    .selectAll("div")
    .data(arr)
    .enter()
    .append("div")
    .attr("class","outerDiv");

var innerDivs;

outerDiv.each(function(d){
  innerDivs = d3.select(this)
    .selectAll("p")
    .data(d.info)
    .enter()
    .append("p")
    .html(function(info,i){    
      var nextInfo = d.info[i+1];    
      if(nextInfo) console.log(JSON.stringify(nextInfo));
      return "Weight = " +info.weight +", MaxAge: "+d.maxAge;
     })
    .attr("class","outerDiv");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于javascript - 使用 D3 跳转 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800673/

相关文章:

javascript - 尝试制作一个 html 复选框,将数字添加到输出字段

c# - 使用 Newtonsoft.Json 反序列化 Json 数组

javascript - Localhost 拒绝来自 Javascript 的连接

javascript - 我的 jquery 加载了两次吗?

javascript - JS 每次提交表单都会重复输入

json - jq 在许多单独的文件中创建输出

javascript - 学习用于数据可视化的 d3.js

javascript - d3.js 多系列折线图工具提示问题

javascript - D3 堆叠条形图适用于支流,但不适用于其他地方

Javascript:列出同一范围内的所有变量(iframe)