Javascript D3嵌套和对象遍历

Javascript D3嵌套和对象遍历,javascript,d3.js,nested,Javascript,D3.js,Nested,我在下面共享了一个json,我正在尝试在可视化之前嵌套数据。我希望在gov和non-gov下描绘每个供应商是如何为高项目和低项目分配的,因此试图创建一个json对象,比如[{v1:{gov:{high:3,low:2},{non-gov:{high:12,low:1}},{v2:{gov:{high:3,low:2},{non-gov:{high:12,low:1},},},{code> 我可以嵌套数据,但无法获得相应的计数。感谢您提供任何指导。如果问题结构含糊不清,我深表歉意 [

我在下面共享了一个json,我正在尝试在可视化之前嵌套数据。我希望在gov和non-gov下描绘每个供应商是如何为高项目和低项目分配的,因此试图创建一个json对象,比如
[{v1:{gov:{high:3,low:2},{non-gov:{high:12,low:1}},{v2:{gov:{high:3,low:2},{non-gov:{high:12,low:1},},},{code>

我可以嵌套数据,但无法获得相应的计数。感谢您提供任何指导。如果问题结构含糊不清,我深表歉意

    [
  {
    "vendor": "V1",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V2",
    "ptype": "Gov",
    "critical": "low"
  },
  {
    "vendor": "V3",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V4",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V5",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V6",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V7",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V8",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V9",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V10",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V1",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V2",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V3",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V4",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V5",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V6",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V7",
    "ptype": "Gov",
    "critical": "low"
  },
  {
    "vendor": "V8",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V9",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V10",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V1",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V2",
    "ptype": "Gov",
    "critical": "low"
  },
  {
    "vendor": "V3",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V4",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V5",
    "ptype": "Non-Gov",
    "critical": "high"
  },
  {
    "vendor": "V6",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V7",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V8",
    "ptype": "Non-Gov",
    "critical": "low"
  },
  {
    "vendor": "V9",
    "ptype": "Gov",
    "critical": "high"
  },
  {
    "vendor": "V10",
    "ptype": "Gov",
    "critical": "low"
  }
]
  • 没有汇总

     n = d3.nest().key(function(d){return d.vendor;})
        .key(function(d){return d.ptype;})
        .key(function(d){return d.critical;})
        .entries(j);
    
  • 带卷

    n = d3.nest().key(function(d){return d.vendor;})
            .key(function(d){return d.ptype;})
            .key(function(d){return d.critical;})
            .rollup(function(leaf){
            return[
            {key:'GH', value:leaf[0].values.length}
            ,{key:'GL',value:leaf[1].values.length}
            ]})
            .entries(j);
    

  • 我不知道D3,但使用vanilla JS可以按如下方式转换数据:

    var-input=[{“供应商”:“V1”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V2”,“ptype”:“政府”,“关键”:“低”},{“供应商”:“V3”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V4”,“ptype”:“非政府”,“关键”:“高”},{“供应商”:“V5”,“ptype”:“非政府”,“关键”:“高”},{“供应商”:“政府”,“V6”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V7”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V8”,“ptype”:“非政府”,“关键”:“低”},{“供应商”:“V9”,“ptype”:“非政府”,“关键”:“高”},{“供应商”:“V10”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V1”,“ptype”:“非政府”,“关键”:“低”},{“供应商”:“V2”,“ptype”:“非政府”,“关键”;“高”;“供应商”;“高”;“供应商”;“高”;“非政府”;“关键”;“低”;“供应商”;“低”;“低”;“供应商”;“关键”;“高”;“非政府”;“关键”;“高”;“供应商”;“高”;“非政府”;“关键”;“低”;“供应商”;“V7”;“ptype:“政府”;“关键”;“低”;“供应商”;“低”;“供应商”;“V8”;“政府”;“关键”;“高”;“高”;“低”;“供应商”;“高”;“高”;“政府”;“高”;“政府”关键“:”高“},{”供应商“:”V9“,”ptype“:”非政府“,”关键“,”高“},{”供应商“,”V10“,”ptype“,”非政府“,”关键“,”低“,”高“,”政府“,”关键“,”低“,”供应商“,”V3“,”ptype“,”非政府“,”关键“,”高“,”政府“,”非政府“,”供应商“,”V4“,”ptype“:”非政府“,”“,”关键“:”高“},{”供应商“:”V5“,”ptype“:”非政府“,”关键“,”高“,”供应商“,”高“,”政府“,”关键“,”V7“,”ptype“,”政府“,”关键“,”高“,”供应商“,”V8“,”ptype“,”非政府“,”关键“,”低“,”供应商“,”V9“,”ptype“,”政府“,”关键“,”高“,”供应商“,”V10“,”ptype“,”政府“,“临界”:“低”}];
    var工作=输入。减少(功能(p,c){
    var v=p[c.供应商];
    如果(!v)v=p[c.vendor]={Gov:{high:0,low:0},“非Gov”:{high:0,low:0};
    v[c.ptype][c.critical]++;
    返回p;
    }, {});
    var输出=Object.keys(工作).map(函数(v){
    var o={};
    o[v]=工作[v];
    返回o;
    });
    
    console.log(output);
    我不知道D3,但是使用vanilla JS可以如下转换数据:

    var input=[{“供应商”:“V1”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V2”,“ptype”:“政府”,“关键”:“低”},{“供应商”:“V3”,“ptype”:“政府”,“关键”:“高”},{“供应商”:“V4”,“ptype”:“非政府”,“关键”:“非政府”,“关键”:“高”},{“供应商”:“V5”,“ptype”:“非政府”,“关键”:“高”},{“供应商”:“供应商”:“V6”,“ptype”:“政府”,“关键”“:”高“},{”供应商“:”V7“,”ptype“:”政府“,”关键“,”高“,”供应商“,”V8“,”ptype“,”非政府“,”关键“,”低“,”供应商“,”V9“,”ptype“,”非政府“,”关键“,”高“,”政府“,”关键“,”高“,”供应商“,”V1“,”ptype“,”非政府“,”关键“,”低“,”供应商“,”V2“,”ptype“,”非政府“,”,“关键”;“高”;“供应商”;“高”;“供应商”;“高”;“非政府”;“关键”;“低”;“供应商”;“低”;“低”;“供应商”;“关键”;“高”;“非政府”;“关键”;“高”;“供应商”;“高”;“非政府”;“关键”;“低”;“供应商”;“V7”;“ptype:“政府”;“关键”;“低”;“供应商”;“低”;“供应商”;“V8”;“政府”;“关键”;“高”;“高”;“低”;“供应商”;“高”;“高”;“政府”;“高”;“政府”关键“:”高“},{”供应商“:”V9“,”ptype“:”非政府“,”关键“,”高“},{”供应商“,”V10“,”ptype“,”非政府“,”关键“,”低“,”高“,”政府“,”关键“,”低“,”供应商“,”V3“,”ptype“,”非政府“,”关键“,”高“,”政府“,”非政府“,”供应商“,”V4“,”ptype“:”非政府“,”“,”关键“:”高“},{”供应商“:”V5“,”ptype“:”非政府“,”关键“,”高“,”供应商“,”高“,”政府“,”关键“,”V7“,”ptype“,”政府“,”关键“,”高“,”供应商“,”V8“,”ptype“,”非政府“,”关键“,”低“,”供应商“,”V9“,”ptype“,”政府“,”关键“,”高“,”供应商“,”V10“,”ptype“,”政府“,“临界”:“低”}];
    var工作=输入。减少(功能(p,c){
    var v=p[c.供应商];
    如果(!v)v=p[c.vendor]={Gov:{high:0,low:0},“非Gov”:{high:0,low:0};
    v[c.ptype][c.critical]++;
    返回p;
    }, {});
    var输出=Object.keys(工作).map(函数(v){
    var o={};
    o[v]=工作[v];
    返回o;
    });
    
    console.log(输出);
    我可以这样做

    var nested_data = d3.nest()
    .key(function(d) { return d.vendor; }).sortKeys(d3.ascending)
    .key(function(d) { return d.ptype; }).sortKeys(function(d) { return d;})
    .key(function(d) { return d.critical; }).sortKeys(function(d) { return d;})
    .rollup(function(leaves) { return leaves.length; })
    .entries(j);
    

    谢谢!

    我可以这样做

    var nested_data = d3.nest()
    .key(function(d) { return d.vendor; }).sortKeys(d3.ascending)
    .key(function(d) { return d.ptype; }).sortKeys(function(d) { return d;})
    .key(function(d) { return d.critical; }).sortKeys(function(d) { return d;})
    .rollup(function(leaves) { return leaves.length; })
    .entries(j);
    

    谢谢!

    谢谢nnnnnn!我在寻找更多的d3方式……:)谢谢nnnnnn!我在寻找更多的d3方式……)