D3.JS 访问名称相当长的 TSV 列

D3.JS Access to a TSV column with a rather long name

我正在从远程服务器请求 TSV 以在 d3.js 中创建图表。结果,我得到了一组只有一个 属性 的对象。 属性 名称非常不合常规,我想重命名 属性 或使用索引号访问 属性。

query ="http://service.iris.edu/irisws/timeseries/1/querynet=IU&sta=ANMO&cha=BHZ&start=2015-07-30T10:21:03&end=2015-07-30T14:21:03&output=ascii2&loc=00"
d3.tsv(query, function(data){
          console.log(data);
      }); 

在控制台中,我可以看到具有以下格式的对象列表:

TIMESERIES IU_ANMO_00_BHZ_M, 130732 samples, 20 sps, 2015-07-30T12:32:06.419539, TSPAIR, INTEGER, COUNTS: "2015-07-30T12:32:06.419539 -515308"
TIMESERIES IU_ANMO_00_BHZ_M, 130732 samples, 20 sps, 2015-07-30T12:32:06.419539, TSPAIR, INTEGER, COUNTS: "2015-07-30T12:32:06.469539 -515308"
TIMESERIES IU_ANMO_00_BHZ_M, 130732 samples, 20 sps, 2015-07-30T12:32:06.419539, TSPAIR, INTEGER, COUNTS: "2015-07-30T12:32:06.519539 -515282"

属性 姓名:

TIMESERIES IU_ANMO_00_BHZ_M, 130732 samples, 20 sps, 2015-07-30T12:32:06.419539, TSPAIR, INTEGER, COUNTS

值如下:

"2015-07-30T12:32:06.419539 -515308"
"2015-07-30T12:32:06.419539 -515308"
"2015-07-30T12:32:06.419539 -515308"

我知道我可以使用类似以下内容访问这些值:

data[i]["TIMESERIES IU_ANMO_00_BHZ_M, 130732 samples, 20 sps, 2015-07-30T12:32:06.419539, TSPAIR, INTEGER, COUNTS"]

但是,我事先并不知道(在客户端)名称中包含的一些信息 属性。

关于如何 access/rename 具有如此非常规名称的 属性 有什么想法吗?

您可以使用 Object.keys 方法访问任何对象键。你的情况:

data.forEach(function (d) {
    // Do whatever with the keys
    keys = Object.keys(d);
    keys.forEach(function(key) {
      console.log('key => value', key, d[key]);
    });
});

您可以使用以下代码将对象的键更改为索引并通过索引访问它。

            for (var i = 0; i < data.length; i++) {
                console.log(data[i]);

                var old_key = Object.keys(data[i]);
                console.log(old_key);

                Object.defineProperty(data[i], i,
                        Object.getOwnPropertyDescriptor(data[i], old_key));
                    delete data[i][old_key];

                console.log(data[i][i]);
                console.log(data[i]);
            };