【问题标题】:Jumping Around JSON with D3使用 D3 跳转 JSON
【发布时间】:2017-01-23 06:50:17
【问题描述】:

我正在 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。这些都可能吗?

【问题讨论】:

    标签: javascript json d3.js nested


    【解决方案1】:

    您的两个要求都是可能的。使用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>

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2015-09-17
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多