d3.js-数组控制的.key调用次数

时间:2018-11-30 18:14:12

标签: javascript d3.js

我正在d3.js中开发一个简单的项目,我拥有的数据是平面json,如下所示:

[
 {"A":A,
  "B":B
  } ... ]

我想开发一个将其构造为分层json对象的函数。问题在于,在我的项目中,数据级别的数量不是恒定的,因此,对于一个数据集,我可能拥有更多的键。首先,我考虑过以一个周期链接.key,如下所示:How to loop chained calls elegantly in JavaScript/CoffeeScript?,但我假设这是苏打的特定特性,而我找不到d3的等效项。

然后,我考虑创建一个循环,在该循环中,我将使用键循环遍历数组,并一次添加一个。我正在尝试的代码是这样的:

var parser = function(data){

    var arrKeys = d3.keys(data[0]);
    var keys = arrKeys.filter(function(arr) {
                                return arr.slice(0,1) !== 'V'})
    var rollups = arrKeys.filter(function(arr) {
                                return arr.slice(0,1)  == 'V'})
    var expensesByName = d3.nest()

    for(i = 0; i< keys.length;i++) {
        expensesByName = expensesByName.key(function(d) { console.log(d[keys[i]]); return d[keys[i]]}); }

    expensesByName = expensesByName.rollup(function(v) { return {
    total: d3.sum(v, function(d) { return d[rollups][0]; })
    }}).entries(data);

}

(v表示要累加或计数的变量,而不是键)

这里的问题是我不知道如何将keys数组传递给函数。我试图调用函数(d,键)没有成功,而且我认为我不能在方法内部传递外部变量。

所以现在我不确定该去哪里。我可以保留这种方法但要进行一些更改吗?我是否需要找到一种全新的方法?您对这项工作有何建议?

编辑:数据是这样的:

[{root: "root",
  brand: "brand1",
  zone: "zone1",
  store: "store1",
  expenses: 234234},
 ...]

我想把它变成这样:

[{key: "root", values:
    {key: "brand", values:
        {key: "zone", values:
            {key: "store", values:
                {key: "expenses", value: 234234}}}}}]

编辑2:假设对于一组特定的品牌,其操作与上面的示例相同。像这样:

[{root: "root",
      brand: "brand1",
      zone: "zone1",
      store: "store1",
      Vexpenses: 234234},
      {root: "root",
      brand: "brand1",
      zone: "zone1",
      store: "store3",
      Vexpenses: 234232},
     {root: "root",
      brand: "brand2",
      zone: "zone1",
      store: "store1",
      Vexpenses: 234291},
      {root: "root",
      brand: "brand1",
      zone: "zone2",
      store: "store3",
      Vexpenses: 234232}]

但是,对于一组不同的商店,不考虑区域,因此我的数据将类似于:

[{root: "root",
      brand: "brand1",
      store: "store1",
      Vexpenses: 234234},
      {root: "root",
      brand: "brand1",
      store: "store3",
      Vexpenses: 234232},
     {root: "root",
      brand: "brand2",
      store: "store1",
      Vexpenses: 234291},
      {root: "root",
      brand: "brand1",
      store: "store3",
      Vexpenses: 234232}]

我想创建一个函数,无需硬编码就可以映射这两种可能性(以上面显示的格式)。

0 个答案:

没有答案