Javascript 在D3.js中添加带有嵌套项的属性

Javascript 在D3.js中添加带有嵌套项的属性,javascript,jquery,d3.js,Javascript,Jquery,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++) {

我已经将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
}
[
 {
    "key":"12345646", <=== this group by first key locationID
    "keyArrt":"locationID",
    "values": [
      { 
        "key":"asdbnnmb12", <==== this group by second key userId 
        "keyArrt":"userId",
         "values":[]
      }
     ]
}...
函数createNestingFunction(propertyName){
返回函数(d){
返回d[propertyName];
};
}
变量级别=[‘第一’、‘第二’、‘第三’]
var nest=d3.nest();
对于(变量i=0;i
所以,如果有两个键['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”,因为
条目(数据)
返回一个数组,您可以使用连续的
映射方法添加key属性

.map(function(d){
    var j = 0;
    d.keyAttr = levels[j];

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

这说明了如何处理玩具数据。

我不确定您是否以正确的方式解决了这个问题。我很难解析您的初始数据结构和所需的最终数据结构。您能将它们放入plunker吗?我有一个更新问题,我可以构建plunker或fiddle,但可以在js中进行更改这就是为什么我没有启动它。不,如果我有3个级别的键,那么我必须映射那么多级别,再加上如果group by中的一些没有数据,那么会发生什么?对于第三个级别,第三个映射函数,如
e.values.map(function(f){})
重复该模式