d3.js如何按指定的顺序列出列?

时间:2015-10-14 18:43:29

标签: javascript d3.js

我有一个javascript对象数据

[
  { 'sex': 'male', 'risk': '0.04', 'age_group': 'old' },
  { 'sex': 'female', 'risk': '0.03', 'age_group': 'young' },
  { 'sex': 'male', 'risk': '0.12', 'age_group': 'old' },
  { 'sex': 'female', 'risk': '0.04', 'age_group': 'old' },
]

我还有一个数组,用于指定名为元数据的列的顺序:

['sex', 'age_group', 'risk']

当使用d3.js可视化数据时(目前我正在使用表格),我需要根据元数据将它们按正确的顺序排列。

下面是我用来生成表的代码,没有对列进行排序。

    var table = d3.select("#visualization_table");
    table.append("thead");
    table.append("tbody");

    var thead = d3.select("thead")
        .selectAll("th")
        .data(metadata)
        .enter()
        .append("th")
        .text(function(d) { return d });
    var tr = d3.select("tbody").selectAll("tr")
        .data(data)
        .enter()
        .append("tr");
    var td = tr.selectAll("td")
        .data(function(d) {return d3.values(d)})
        .enter()
        .append("td")
        .text(function(d) {return d});

但顺序就像是'性','风险','age_group',而我想要的是'性','age_group','风险'。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您可以使用.data()在嵌套metadata调用中显式构建对象来执行此操作:

.data(function(d) {
  return metadata.map(function(m) { return d[m]; });
})

完整演示here