2012-10-19 22 views
1

我從我的PHP腳本的JSON字符串是這樣的:Javascript數組。高級

var r.co = { 
       "A20018425":[ 
           {"balance":"1390.31"},  // 1 
           {"balance":"1304.11"},  // 2 
           {"balance":"1188.11"},  // 3 
           {"balance":"1421.71"}  // 4 
          ], 

       "A25005922":[ 
           {"balance":"1000"},   // 1 
           {"balance":"1000.86"},  // 2 
           {"balance":"986.32"},  // 3 
           {"balance":"988.96"},  // 4 
           {"balance":"980.26"},  // 5 
           {"balance":"980.16"}  // 6 MAX 
          ], 

       "A25005923":[ 
           {"balance":"1001"},   // 1 
           {"balance":"1000.16"},  // 2 
          ]   
      } 

我不知道有多少AXXXXXXXX元素和多少個元素包含的內容。 得到一個元素我使用下面的代碼:

var accounts = []; 
for(var key in r.co) { 
    if(r.co.hasOwnProperty(key)) { 
     accounts.push(key); 
    } 
} 

現在我知道我的一個元素長度現在

var accounts_length = accounts.length; // 3 for example 

我需要知道A類元素的最大長度:

var accounts_elements_length = []; 

    for (var c = 0; c < accounts.length; c++) { 

      accounts_elements_length.push(r.co[accounts[c]].length); 
    } 

    var accounts_elements_length_max = accounts_elements_length.max() // 6 For example 

如何獲得該圖表的輸出數組?

var outputData = [{ 
         count:  1, 
         A20018425: 1390.31, 
         A25005922: 1000, 
         A25005923: 1001 
        }, { 
         count:  2, 
         A20018425: 1304.11, 
         A25005922: 1000.86, 
         A25005923: 1000.16 
        }, { 
         count:  3, 
         A20018425: 1188.11, 
         A25005922: 986.32 
        }, { 
         count:  4, 
         A20018425: 1421.71, 
         A25005922: 988.96 
        }, { 
         count:  5, 
         A25005922: 980.26 
        }, { 
         count:  6, 
         A25005922: 980.16 
        } 
     }]; 

謝謝!

+0

雖然這是完全可以做到你想要什麼,我會建議改變你的數據結構,如果可能的話:你是什麼現在得到的東西不適合有用/有效的處理。 – Xophmeister

+0

我無法更改我的輸入數據。 – user889349

+0

你到底想做什麼? 'outputData'的數據結構與'r.co'很不相同 – Bergi

回答

2

剛剛合併的algorythms:

var outputData = []; 
for (var key in r.co) { 
    if (r.co.hasOwnProperty(key)) { 
     var account_length = r.co[key].length; 
     for (var c = 0; c < account_length; c++) { 
      if (outputData[c] === undefined) { 
       outputData[c] = { count: c+1 }; 
      } 
      outputData[c][key] = r.co[key][c].balance; 
    } 
    } 
} 
console.log(outputData); 

jsfiddle

+0

+1優雅的解決方案 – bhb

+0

@bhb謝謝:) – Stano

+0

太棒了!謝謝! – user889349

1

代碼:

var outputData = []; 
for (var i = 0; i < 6; i++) { // filter should be - i < accounts_elements_length_max 
    var temp = { 
     'count': i + 1 
    }; 

    for (var j = 0; j < accounts.length; j++) { 
     if (r[accounts[j]][i]) temp[accounts[j]] = r[accounts[j]][i].balance; 
    } 

    outputData.push(temp); 
} 

注意,我硬編碼accounts_elements_length_max(6)。

輸出,我得到:

[{ 
    "count": 1, 
    "A20018425": "1390.31", 
    "A25005922": "1000", 
    "A25005923": "1001"}, 
{ 
    "count": 2, 
    "A20018425": "1304.11", 
    "A25005922": "1000.86", 
    "A25005923": "1000.16"}, 
{ 
    "count": 3, 
    "A20018425": "1188.11", 
    "A25005922": "986.32"}, 
{ 
    "count": 4, 
    "A20018425": "1421.71", 
    "A25005922": "988.96"}, 
{ 
    "count": 5, 
    "A25005922": "980.26"}, 
{ 
    "count": 6, 
    "A25005922": "980.16"}]​ 

工作fiddle