在D3.js

时间:2015-07-30 11:52:34

标签: 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++) {
    nest = nest.key( createNestingFunction(levels[i]) );

}

var root = {
    "key":"root", 
    "values": nest.entries(data) //compute the nest
}

如果有两个键[&#39; locationId&#39;,&#39; userID&#39;]

,那么结果就是这样的
[
 {
    "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级别上我可以识别它们

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

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

1 个答案:

答案 0 :(得分:1)

由于.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;
  });

Here is a plunker显示这与玩具数据一起使用。