将数组元素重新排列为两个新数组

时间:2014-01-17 16:48:49

标签: javascript arrays date jqplot

我有一个5000行的json编码数组,如下所示:

[2013-01-01 07:00, 10, 50]

为了绘制一个带有两个y轴的jqplot,我需要得到两个不同的数组,如下所示:

array1: [2013-01-01 07:00, 10]
array2: [2013-01-01 07:00, 50]

我尝试的是以下方法,但似乎效果不好:

var data= <?php echo json_encode($dataarray); ?>;
var array1= [];  
var array2 = [];

for(var i=0, len=data.length; i<len; i++){
  array1[i] = array1[i][0]+array1[i][1];
  array2[i] = array2[i][0]+array2[i][2];
};

有人可以提供帮助,还是有更简单的方法用原始数组绘制2-y轴图,而不需要拆分数组元素?

2 个答案:

答案 0 :(得分:2)

假设它们都在数组中且项目的形状都相同,您可以使用以下代码:

var data = [
  ['2013-01-01 07:00', 10, 50],
  ['2013-01-01 08:00', 20, 70]
]

var array1 = data.map(function(item){ return [item[0], item[1]]});
var array2 = data.map(function(item){ return [item[0], item[2]]});

或者,您可以更改原始方法:

var array1 = [];  
var array2 = [];

for(var i=0, len=data.length; i<len; i++){
  array1.push([data[i][0], data[i][1]]);
  array2.push([data[i][0], data[i][2]]);
};

最后,我认为数组通常更适合存储相同类型的项目。您的原始数据可能更适合这样的结构:

var data = [
  { date: '2013-01-01 07:00', first : 10, second: 50},
  { date: '2013-01-01 07:00', first : 20, second: 70}
]

同样的解决方案只需稍加修改即可使用。

答案 1 :(得分:0)

这是O(n)时间复杂度方法:

var data= <?php echo json_encode($dataarray); ?>;
var array1 = [];  
var array2 = [];

var len = data.length;
for (i = 0; i < len; i++) {
    array1.push([data[i][0], data[i][1]]);
    array2.push([data[i][0], data[i][2]]);
}