【问题标题】:Add attribute with nested entries in D3.js在 D3.js 中添加带有嵌套条目的属性
【发布时间】:2015-07-30 11:52:33
【问题描述】:

我已经使用 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 来识别呢?关键是价值 所以我期望的是这样的结果

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

]

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

如何添加此键或任何其他带有键和值的属性,以便在 groupby 级别上识别它们

更多:示例 只是想象你有社交网络数据,你想建立这样的层次结构,第一层是位置,而不是用户,而不是他们的相关帖子(这实际上是真实的行数据)

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

【问题讨论】:

  • 您可能以正确的方式解决问题,我不确定。我很难解析您的初始数据结构是什么样的以及您想要的最终数据结构应该是什么样的。你能把它们放进去吗?
  • 我有更新问题,我可以构建 plunker 或 fiddle,但可能是 js 的变化,这就是我没有启动它的原因。

标签: javascript jquery d3.js


【解决方案1】:

由于.entries(data) 返回一个数组,您可以使用连续的map 方法添加键属性。

.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 显示了这个使用玩具数据。

【讨论】:

  • 不,如果我有 3 个级别的键而不是我必须映射那么多级别,加上如果某些 group by 没有数据呢?
  • 对于第三层,第三个映射函数,如 e.values.map(function(f){ }) 重复该模式
猜你喜欢
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多