D3.js -有条件地对数组元素应用nest.key()函数

D3.js - Conditional apply nest.key() function to array elements

本文关键字:key nest 函数 应用 数组元素 js 有条件 D3      更新时间:2023-09-26

我有一个表示分层树数据的CSV:

industry,level1,level2,level3,name
Ecommerce,Web,,,Rakuten
Ecommerce,Crowdsourcing,,,Lancers
Social,Photo sharing,Deco apps,,Snapeee
Social,Photo sharing,Deco apps,Collage apps,DecoAlbum
Portals,,,,Yahoo Japan

level1...level3行表示子节点,name行表示底节点。我试图应用d3.nest()函数,以获得分层JSON对象。特别地,我想去掉那些level行为空的节点。到目前为止,我有以下代码:

d3.csv("data.csv", function(rows) {
  sunburst_tree = d3.nest()
    .key(function(d) { return d.industry; })
    .key(function(d) { return d.level1; })
    .key(function(d) {  if (!(typeof d.level2 === 'undefined')) return d.level2; })
    .entries(rows);
  console.log(sunburst_tree);
});

生成空键JSON对象,如下所示:

{"key":"Portals",
"values":[{"key":"",
    "values":[{"key":"",
        "values":[{"industry":"Portals","level1":"","level2":"","level3":"","name":"Yahoo Japan"}]
        }]
    }]
}

相反,我想删除所有空子节点:

{"key":"Portals",
    "values":[{"industry":"Portals",
               "level1":"","level2":"","level3":"","name":"Yahoo Japan"}]}
}

如何实现这一点?

您想要多个密钥吗?似乎在你想要的格式中,你只有一个键。

如果你不想要多个键,你应该删除定义键的函数,

如果你想要多个键,我建议在你使用你的函数生成键之前有一个if子句。检查空字符串

d.level1 === "" 

应该帮助。