2015-10-14 46 views
0

我試圖在我的頁面上顯示與jquery插件DataTables和highcharts.js相同的數據集。所以當我改變數據時,表格和圖表也會改變。我的數據是這樣的:如何轉換對象數組DataTable能識別Highcharts識別的內容?

var data = [ 
    {"itemName": "item1", "Jan": "4056479", "Feb": "3716377", "Mar": "6924148"}, 
    {"itemName": "item2", "Jan": "3034448", "Feb": "930077", "Mar": "1210250"}, 
    {"itemName": "item3", "Jan": "3938924", "Feb": "1624727", "Mar": "9626947"} 
]; 

我可以把它與數據表,但儘管工作的日子裏,我無法將其轉換爲一種格式Highcharts接受的工作。到目前爲止,我可以顯示以下數據集的highcharts:由接受

series: [ 
    { 
    index: 0, 
    name: "Jan", 
    data: [ 
     [data[0]["itemName"], parseFloat(data[0]["Jan"])], 
     [data[1]["itemName"], parseFloat(data[1]["Jan"])], 
     [data[2]["itemName"], parseFloat(data[2]["Jan"])], 
    ] 
    }, 
    { 
    index: 1, 
    name: "Feb", 
    data: [ 
     [data[0]["itemName"], parseFloat(data[0]["Feb"])], 
     [data[1]["itemName"], parseFloat(data[1]["Feb"])], 
     [data[2]["itemName"], parseFloat(data[2]["Feb"])], 
    ] 
    }, 
    { 
    index: 1, 
    name: "Mar", 
    data: [ 
     [data[0]["itemName"], parseFloat(data[0]["Mar"])], 
     [data[1]["itemName"], parseFloat(data[1]["Mar"])], 
     [data[2]["itemName"], parseFloat(data[2]["Mar"])], 
    ] 
    } 
]}; 

可有人請給我一個循環的第一組(基於ITEMNAME)轉換成另一種(基於個月)oneliner Highcharts。我有數據頁面。上述解決方案是不可管理的。

請參閱jsfiddle here

我希望我可以標記兩個答案。兩者都解決了我的問題,我不知道技術上哪個更好。感謝您的及時答覆。

回答

2

SOLUTION

您可以使用下面的函數來過濾數據:

function filterData(data, key){ 
    var result = []; 
    $.each(data, function(index, rcd){  
     result.push([rcd['itemName'], parseFloat(rcd[key])]); 
    }); 
    return result; 
} 

那麼對於HighCharts代碼,你可以這樣寫:

{ 
    index: 0, 
    name: "Jan", 
    data: filterData(data, "Jan") 
} 

DEMO

this jsFiddle代碼和演示。

0

這將改變從基礎到一個月名稱基於邏輯:

var data = [ 
 
{"itemName": "item1", "Jan": "4056479", "Feb": "3716377", "Mar": "6924148"}, 
 
{"itemName": "item2", "Jan": "3034448", "Feb": "930077", "Mar": "1210250"}, 
 
{"itemName": "item3", "Jan": "3938924", "Feb": "1624727", "Mar": "9626947"} 
 
    ]; 
 

 
var months = ["Jan","Feb","Mar"] //and so on.... 
 
var series = []; 
 
$.each(months,function(i,v){ 
 
    var currentData = []; 
 
    $.each(data,function(k,l){ 
 
\t  currentData.push([l.itemName,parseFloat(l[v])]); 
 
    }); 
 
    series.push({index: i, name: v, data: currentData}) 
 
}); 
 
    
 
console.log(series);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

這是你的提琴編輯:fiddle