如何映射包含数据数组和一个日期的json数据?

时间:2018-05-24 08:40:54

标签: javascript arrays json d3.js key

我想创建一个看起来像How to use json data instead of tsv file in d3 multi line charts?

的图表

为此,我使用JSON数据,但在我的数据映射中有一些我不了解的东西

    {
"Session_test": [{
    "datas_lines": [{
            "datas_line": [],
            "log_time": "No data"
        },
        {
            "datas_line": [],
            "log_time": "No data"
        },
        {
            "datas_line": [],
            "log_time": "No data"
        },
        {
            "datas_line": [
                "157",
                "158",
                "157",
                "157",
                "157",
                "158",
                "159",
                "161",
                "160",
                "160",
                "159",
                "158",
                "159",
                "160",
                "160",
                "160",
                "160",
                "161",
                "160",
                "161",
                "159",
                "161",
                "161",
                "158",
                "161",
                "159",
                "160",
                "157"
            ],
            "log_time": "5/18/2017 4:32:14 PM"
        },
        {
            "datas_line": [
                "154",
                "156",
                "155",
                "155",
                "155",
                "156",
                "158",
                "159",
                "158",
                "157",
                "157",
                "156",
                "157",
                "158",
                "159",
                "158",
                "158",
                "159",
                "159",
                "159",
                "158",
                "159",
                "159",
                "156",
                "159",
                "157",
                "158",
                "156"
            ],
            "log_time": "5/18/2017 4:34:14 PM"
        },
        {
            "datas_line": [
                "154",
                "156",
                "155",
                "155",
                "155",
                "156",
                "158",
                "159",
                "158",
                "157",
                "157",
                "156",
                "157",
                "158",
                "159",
                "158",
                "158",
                "159",
                "159",
                "159",
                "158",
                "159",
                "159",
                "156",
                "159",
                "157",
                "158",
                "156"
            ],
            "log_time": "5/18/2017 4:34:14 PM"
        }
    ]
}]
}     

所以,我有一个objet数组,每个对象包含一个log_time(日期)和一个数字数组。

我需要使用这种格式来利用它们:

var data = [
{log_time:"5/18/2017 4:32:14 PM","0":"157", "1":"158", "2": "157", etc...},
{log_time:"5/18/2017 4:32:14 PM","0":"154" , "1":"156", "2": "155", etc...}
]; 

我如何制作类似的东西?

我的实际代码:

var dateKey = d3.keys(data[0]);
var i = keys.indexOf('log_time')
if(i != -1) {
    keys.splice(i, 1);
}
var temp_list = keys.map(function(d) { 
    return {
      id:d,
      values: data.map( function(e) {
        return {
          date: e.log_time,
          temperature: e[d]
        };
      })
  } });
  console.log(temp_list);

我目前正在重复使用此帖子中的代码:How to use json data instead of tsv file in d3 multi line charts?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

let responses = [];


// your data
let data = Session_test[0].datas_lines;

data.forEach(obj => {
    if (obj.log_time !== "No data") {
        let iterator = 0;
        let final = {};
        obj.datas_line.forEach(d => {
        final[iterator.toString()] = d;
        iterator++;
        });
        final.log_time = obj.log_time;
        responses.push(final);

    }
});

说明:您只需要检查log_time属性是否包含数据。如果是这样,只需对值运行for循环并继续将其添加到对象中。一旦对象完成,将其推送到数组。