如何在javascript中将对象数组转换为简单数组?

时间:2016-05-18 08:51:24

标签: javascript arrays json datatable

我尝试使用带数据表的AJAX请求,但我的JSON格式错误。所以我尝试转换结构。 我有一个JSON字符串作为对象数组,如下所示:

[  
    {  
          "timestamp":"1461308319473",
          "id":"1",
          "value":"77"
    },
    {  
          "timestamp":"1461308458181",
          "id":"2",
          "value":"99"
    }
] 

但我需要这种结构:

{
  "data": [
    [
      "1461308319473",
      "1",
      "77"
    ],
    [
      "1461308458181",
      "2",
      "99"
    ]
  ]
}

如何转换数组? 我想在这个命令中使用datatable:

$("#table")
    .dataTable({
        "ajax": {
            "type": "GET",
            "url": "https://url",
            "dataSrc": function (jsonData) {
            for (var i = 0; i < jsonData.length; i++) {
                returnData.push({
                    'timestamp': moment.unix(jsonData[i].timestamp / 1000).format("DD.MM.YY hh:mm:ss"),
                    'id': jsonData[i].id,
                    'value': jsonData[i].value
                });
            }
            return returnData;
        },
        "columns": [
            { "data": "timestamp" },
            { "data": "id" },
            { "data": "value" }
        ]
    }
});

此刻我收到以下错误: enter image description here

由于

3 个答案:

答案 0 :(得分:1)

你可以这样做:

var keys = ['timestamp', 'id', 'value'],
    data = jsonData.map(function(datum){
      return keys.map(function(key){return datum[key]})      
    })

data  = {data:data}
console.log(data)
ES6中的

let keys = ['timestamp', 'id', 'value'],
  data = jsonData.map( datum => keys.map(key => datum[key]))

data = {data}

Fiddle Demo

答案 1 :(得分:1)

如果你起诉只有timestampidvalue那么

var data = [ 
    {  
          "timestamp":"1461308319473",
          "id":"1",
          "value":"77"
    },
    {  
          "timestamp":"1461308458181",
          "id":"2",
          "value":"99"
    }
] ;

var result = {};
result.data = data.map(function(d) {
    return [
        d.timestamp,
        d.id,
        d.value
    ];
});

document.write(['<pre>', JSON.stringify(result, 0, 3), '</pre>'].join(''));

答案 2 :(得分:0)

您可以使用以下示例创建一个具有data属性的对象,该对象是一个空数组,然后使用数组上的forEach()方法填充:

var objectWithArray = {'data': []};    
var arrWithObject = [  
        {  
              "timestamp":"1461308319473",
              "id":"1",
              "value":"77"
        },
        {  
              "timestamp":"1461308458181",
              "id":"2",
              "value":"99"
        }
    ] 
    arrWithObject.forEach(functio(v,i){
        objectWithArray.data.push([v.timespam, v.id, v.value])
    })