2014-01-07 29 views
0

有没有一种优雅的方式将下面的json数据转换为下面所需的数据格式?将数组从键转换为无键

原始数据

{ 
    "data": [ 
     { 
      "timestamp": 1385118121279, 
      "value": 40 
     }, 
     { 
      "timestamp": 1385118301279, 
      "value": 7 
     } 

    ] 
} 

所需的格式

[[1385118121279,40],[1385118301279,7]] 
+0

是的,这很容易用一个简单的' '语句,如果你愿意,也可以使用'.map()'。 –

回答

1

是的,这一点:

var transformed = originalObj.data.map(function(item){ 
    return [item.timestamp, item.value]; 
}); 

然而,不老浏览器。

对于所有浏览器,包括旧的:

var transformed = []; 
for(var i in originalObj.data){ 
    var item = originalObj.data[i]; 
    transformed.push([item.timestamp, item.value]); 
} 

干杯

+0

支持在旧版浏览器中,jQuery还提供了一个'map'功能 – jasonscript

+0

没错。还有很多框架。但提问者没有提到jQuery,也没有提到问题标签。干杯;) –

+0

表示同意。只需为那些必须支持旧版浏览器的人添加评论(像我一样) – jasonscript

0

这可以通过遍历对象来完成,我们可以得到我们想要的阵列。

var abc ={ 
    "data": [ 
     { 
      "timestamp": 1385118121279, 
      "value": 40 
     }, 
     { 
      "timestamp": 1385118301279, 
      "value": 7 
     } 

    ] 
}; 
var dataArray = []; 
for (var key in abc.data) { 
     if(abc.data.hasOwnProperty(key)){ 
     dataArray.push(abc.data[key].timestamp); 
     } 
} 
console.log(dataArray); 
0

我不知道这是否是 “优雅”,但无论如何:

function obj2arr(obj){ 
    if(obj instanceof Array){ 
     var ret=[]; 
     for(var i=0;i<obj.length;i++){ 
      if(typeof obj[i]=="object"){ 
       ret.push(obj2arr(obj[i])); 
      }else{ 
       ret.push(obj[i]); 
      } 
     } 
     return ret; 
    }else if(typeof obj=="object"){ 
     var ret=[]; 
     var keys=Object.getOwnPropertyNames(obj); 
     for(var i=0;i<keys.length;i++){ 
      if(typeof obj[keys[i]]=="object"){ 
       ret.push(obj2arr(obj[keys[i]])); 
      }else{ 
       ret.push(obj[keys[i]]); 
      } 
     } 
     return ret; 
    }else{ 
     return obj; 
    } 
} 

以下测试:

console.log(obj2arr({ 
    "data": [{ 
     "timestamp": 1385118121279, 
     "value": 40 
    },{ 
     "timestamp": 1385118301279, 
     "value": 7 
    }] 
})); 

输出:

[ [ [ 1385118121279, 40 ], [ 1385118301279, 7 ] ] ] 

Online demo (我很惊讶地看到了JS引擎Ideone不支持Object.getOwnPropertyNames

虽然请注意,这是一个递归的解决方案,那么大的物体可能导致堆栈溢出...