在D3.js中添加具有嵌套条目的属性

我已经使用d3.nest()逐行值

代码是这样的

function createNestingFunction(propertyName){ return function(d){ return d[propertyName]; }; } var levels = ['first', 'second', 'third'] var nest = d3.nest(); for (var i = 0; i < levels.length; i++) { nest = nest.key( createNestingFunction(levels[i]) ); } var root = { "key":"root", "values": nest.entries(data) //compute the nest } 

如果有两个键[‘locationId’,’userID’],那么结果将是这样的

 [ { "key":"12345646", <=== this group by first key locationID "values": [ { "key":"asdbnnmb12", <==== this group by second key userId "values":[] } ] }, { "key":"12345we6", <=== this group by first key locationId "values": [ { "key":"hjhggg33", <==== this group by second key userId "values":[] } ] } 

]

现在我怎么能只用钥匙识别呢? 关键是价值所以我期望的结果是这样的

 [ { "key":"12345646", <=== this group by first key locationID "keyArrt":"locationID", "values": [ { "key":"asdbnnmb12", <==== this group by second key userId "keyArrt":"userId", "values":[] } ] }... 

]

所以我可以按级别识别组,因为我必须根据分组级别重定向页面,并且我必须确定当前级别。

我如何添加此键或任何其他具有键和值的attr所以在groupby级别我可以识别它们

更多: 示例只是想象您有社交网络数据,并且您希望构建层次结构,如此第一级是位置,而不是用户和相关post(实际上是实际行数据)

因此,您将为每个级别位置和用户添加两个密钥..它将运行良好但在获取数据后您在递归或简单循环中的某处使用此数据将如何识别当前节点是用户级别goupr或仅位置它将只有关键实际上值不是attr,关键如位置说USA,FRANCE比那个级别会显示为美国和FRANCE的关键,所以在用户级别上按键同样会是用户名如AMIT或任何其他名称..所以基于在键上我们无法决定哪个组是这个…所以我想要的是,如果键是位置值而不仅仅是添加一个像attr的attr以及我们只显示“location”的地方那么我们就可以确定这个对象具有基于位置或用户的分组值。

因为.entries(data)返回一个数组,你可以使用连续的map方法来添加键attrs。

 .map(function(d){ var j = 0; d.keyAttr = levels[j]; d.values.map(function(e){ e.keyAttr = levels[++j]; return e; }); return d; }); 

这是一个使用玩具数据显示这个的plunker 。