1

我已经看到有关在 d3.js 中处理“嵌套 json”的问题,并且看到建议的解决方案主要是“扁平化”数据(意味着创建一个新变量并将数据推入所需级别)这里有两个示例:

我的问题是:可以使用各种数组函数之一来访问数据级别而不创建新变量吗?处理数组

我有一个看起来像这样的数组:

var dataset = 
 {"directed": false, 
  "graph": [], 
  "nodes": 
 [
 {"Region": "X15", "Group": "EU", "id": "BE"}, 
{"id": "FR"}, 
{"id": "BG"}, 
{"id": "DK"}, 
{"id": "HR"}, 
{"id": "DE"}
], 
"links": 
 [
 {"source": 0, "target": 0, "weight": 0}, 
 {"source": 0, "target": 1, "weight": 130}, 
 {"source": 0, "target": 2, "weight": 1}, 
 {"source": 0, "target": 3, "weight": 36}, 
 {"source": 0, "target": 4, "weight": 4}, 
 {"source": 0, "target": 5, "weight": 117}
 ], 
 "multigraph": false}

我试过以下

并且我想访问权重(使用 d3.max 计算其最大值)

dataset.links // gives me link 
dataset.links[0].weight // gives me the weight of first but can't get the index to work

使用数组函数时,我无法获得低于该值的元素

 d3.entries(dataset)
 d3.values(dataset.links)

我错过了什么?

我希望这个问题是有道理的。

PS:如果必须展平数组,在javascript中这样做有什么好处,或者如果我创建数组(例如在python中)并将其传递给javascript,它是否相同

4

1 回答 1

3

再次阅读您的帖子后,我想我知道您要做什么。

如果你想用类似的东西访问权重列d3.max,你可以使用访问器函数。

访问器函数指定您希望如何查看数组中的项目。weight在您的情况下,您需要一个函数来查看dataset.links. 使用链接作为输入,这个函数非常简单:

function getWeight(link){return link.weight}

然后我们可以使用这个函数作为访问函数来获取 中weight字段的最大值dataset.links,如下所示:

var maxWeight = d3.max(dataset.links, getWeight)

这使用d3.max命令的一般形式,d3.max(array [,accessorFcn]).

我已经设置了一个小提琴来执行此操作,然后提醒最大重量。

于 2013-06-17T21:27:06.900 回答