javascript - D3 中的数组变换

标签 javascript arrays json d3.js

从此转换数组的最佳方法是什么

[{
  "state": "vic",
  "age_group_1": 10,
  "age_group_2": 20,
  "age_group_3": 30,
  "age_group_4": 40,
  "age_group_5": 50,
}, {
  "state": "nsw",
  "age_group_1": 60,
  "age_group_2": 70,
  "age_group_3": 80,
  "age_group_4": 90,
  "age_group_5": 100,
}, {
  "state": "tas",
  "age_group_1": 11,
  "age_group_2": 21,
  "age_group_3": 31,
  "age_group_4": 41,
  "age_group_5": 51,
}, {
  "state": "qld",
  "age_group_1": 61,
  "age_group_2": 71,
  "age_group_3": 81,
  "age_group_4": 91,
  "age_group_5": 101,
}]

到此

[{
  "age_group": "age_group_1",
  "states": [{
    "name": "vic",
    "value": 10
  }, {
    "name": "nsw",
    "value": 60
  }, {
    "name": "tas",
    "value": 11
  }, {
    "name": "qld",
    "value": 61
  }]
}, {
  "age_group": "age_group_2",
  "states": [{
    "name": "vic",
    "value": 20
  }, {
    "name": "nsw",
    "value": 70
  }, {
    "name": "tas",
    "value": 21
  }, {
    "name": "qld",
    "value": 71
  }]
}, {
  "age_group": "age_group_3",
  "states": [{
    "name": "vic",
    "value": 30
  }, {
    "name": "nsw",
    "value": 80
  }, {
    "name": "tas",
    "value": 31
  }, {
    "name": "qld",
    "value": 81
  }]
}, {
  "age_group": "age_group_5",
  "states": [{
    "name": "vic",
    "value": 40
  }, {
    "name": "nsw",
    "value": 90
  }, {
    "name": "tas",
    "value": 41
  }, {
    "name": "qld",
    "value": 91
  }]
}, {
  "age_group": "age_group_5",
  "states": [{
    "name": "vic",
    "value": 50
  }, {
    "name": "nsw",
    "value": 100
  }, {
    "name": "tas",
    "value": 51
  }, {
    "name": "qld",
    "value": 101
  }]
}]

我可以使用简单的 javascript 和循环,但我想使用 d3 函数或任何其他库来处理数据转换。

哪个是数据转换的最佳库。

最佳答案

您可以使用临时对象来引用结果数组。

var data = [{ "state": "vic", "age_group_1": 10, "age_group_2": 20, "age_group_3": 30, "age_group_4": 40, "age_group_5": 50, }, { "state": "nsw", "age_group_1": 60, "age_group_2": 70, "age_group_3": 80, "age_group_4": 90, "age_group_5": 100, }, { "state": "tas", "age_group_1": 11, "age_group_2": 21, "age_group_3": 31, "age_group_4": 41, "age_group_5": 51, }, { "state": "qld", "age_group_1": 61, "age_group_2": 71, "age_group_3": 81, "age_group_4": 91, "age_group_5": 101, }],
       result = [];

data.forEach(function (a) {
    Object.keys(a).forEach(function (k) {
        if (k !== 'state') {
            if (!this[k]) {
                this[k] = { age_group: k, states: [] };
                result.push(this[k]);
            }
            this[k].states.push({ name: a.state, value: a[k] });
        }
    }, this);
}, {});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

关于javascript - D3 中的数组变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36563727/

相关文章:

javascript - 通过Ajax运行php脚本

javascript - 我需要对我的 HTML/JavaScript 代码进行一些故障排除

javascript - 返回资源对象而不是 Mongoose.count 值

Python 数组到多维数组

javascript - 如何在javascript中合并具有相同值的json数组

Golang 中的 Json 解析

javascript - Node.JS 中的 Facebook OAuth : storing the access token

javascript - 编译 Babel/React 时出错(未知选项)

C# 试图解密文件以仅处理内存

c# - 奇怪的 JSON 反序列化 c#