2014-01-17 186 views
1

我有5000行的JSON編碼數組都在尋找這樣的:重新排列的數組元素爲兩個新的陣列

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

爲了繪製一jqplot具有兩個y軸,我需要得到兩個不同的陣列出這一個看起來像以下:

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軸繪圖,而不需要拆分數組元素?

+0

你能提供你的輸入例如array1.push的 – musefan

+0

'幾行(數組1 [I] [0])按(數組1 [。 I] [1]);'? – Beterraba

回答

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} 
] 

同樣的解決方案可與細微的修改。

+0

這是可行的解決方案,當然這意味着你必須走陣列兩次,時間複雜度爲O(2n),如果使用更多的手動方法,當然可以改進。 –

+0

@MikeBrant即使O(2n)=== O(n),你仍然有正確的表現。性能命中率是額外的比較和增量,對於問題中提到的5000個元素來說是微不足道的。 – Tibos

+0

您的O(n)方法需要從數據數組的第二維(即'data [i] [0]') –

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]]); 
}