【发布时间】:2016-03-23 12:55:21
【问题描述】:
我想知道,是否可以从给定的 json 数据创建,例如:
data0 = [ {id: name1, value1: 5, value2: 13}, {id: name2, value1: 2, value2: 5}, {id: name3, value1: 4, value2: 6}, {id: name4, value1: 3, value2: 7} ];
下面的数组,还有两个对象,例如:
var data = [ {id: sum1, value: 14}, {id: name1_, value: 8}, {id: name2_, value: 3 }, {id: name3_, value: 2}, {id: name4_, value: 4} {id: sum2, value: 31];
第一个和最后一个对象的值分别等于所有 value1 和 value2 的总和。并且所有其他对象在 value2 和 value1 之间都有一个 value = 差异。
data0 可以具有不同的对象属性值,具体取决于报告的类型。
我在 Microstrategy 中使用的 d3 瀑布图需要它。因此,我不必对 js 代码进行大量更改,只需添加代码以创建新数组,并使用其中的数据构建可视化。
我拥有的csv格式的初始数据0:
id,value1,value2
name1,5,13
name2,2,5
name3,4,6
name4,3,7
据我了解,函数 d3.csv 像 json 数据一样读取 csv 格式的数据,将标题(第一行)作为 4 个对象(在本例中)的属性,其中每一行都包含值每个对象的属性。
我使用以下代码调用数据集函数:
d3.csv("data0.csv", function(error, data) {
var values = d3.keys(data[0]).filter(function(key) {return key !== "id";});
data.forEach(function(d) {
for (var i = 0; i < values.length; i++) {
d.value = +d[values[i]];
return d;
}});
考虑到属性名称也可以不同(不是“value1”和“value2”),我想如何引用所有 value1 和 value2,并找到每个总和。我应该对 i 和 j 使用 for 循环吗?
任何帮助将不胜感激!
【问题讨论】:
-
这当然是可能的,并且可以通过许多不同的方式实现。是否允许对原始数组进行变异(更改)还是必须是副本?
-
最好问一个新问题,因为重组与csv数据无关。另外,请看这里:stackoverflow.com/help/someone-answers
-
你能提供你正在阅读的 csv(s) 吗?
-
@TobyFlemming,我刚刚添加到问题中,我正在阅读的 csv 文件是什么样的。但是,它可以具有任何其他属性名称,具体取决于稍后在 Microstrategy 中生成的报告。
标签: javascript arrays d3.js