2017-07-18 55 views
2

我在JavaScript有這些陣列的響應創建4個維度數組:
與Ajax調用

var data = [ 
      { y: '2017-01', a: 50, b: 90, c:110}, 
      { y: '2017-02', a: 65, b: 75, c:120}, 
      { y: '2017-03', a: 50, b: 50, c:10}, 
      { y: '2017-04', a: 75, b: 60, c:170}, 
      { y: '2017-05', a: 80, b: 65, c:60}, 
      { y: '2017-06', a: 90, b: 70, c:30}, 
      { y: '2017-07', a: 100, b: 75, c:10}, 
      { y: '2017-08', a: 115, b: 75, c:0}, 
      { y: '2017-09', a: 120, b: 85, c:0} 
     ] 

我創建了一個Ajax調用,讓回JSON。

$.ajax({ 
       type: "POST", 
       url: "php/get_incomes_months.php", 
       data: {year:current_year}, 
       dataType: "json", 
       success: function(data) { 
        var data_array = [ 
         {y:data[0]['date'], a:data[0]['validated'], b:data[0]['revenue'], c:data[0]['costes']}, 
         {y:data[1]['date'], a:data[1]['validated'], b:data[1]['revenue'], c:data[1]['costes']} 
        ]; 
        fooDone(data_array); //after we have data, we pass it to fooDone  
       }, 
       error: function(data){ 

       } 
      }); 

這是JSON:

0 Object 
validated "0" 
revenue "50244.81" 
costes "0" 
date "2017-01" 
1 Object 
validated "44788.16" 
revenue "30640.51" 
costes "0" 
date "2017-02" 
2 Object 
validated "68324.64" 
revenue "80363.51" 
costes "11072.73" 
date "2017-03" 
3 Object 
validated "0" 
revenue "50244.81" 
costes "0" 
date "2017-04" 
4 Object 
validated "2738" 
revenue "103145.62" 
costes "11" 
date "2017-05" 
5 Object 
validated "510" 
revenue "1459283.09" 
costes "213" 
date "2017-06" 
6 Object 
validated "24034.21" 
revenue "50367.81" 
costes "0" 
date "2017-07" 
7 Object 
validated "24" 
revenue "50244.81" 
costes "0" 
date "2017-08" 

在這裏取得成功的功能,我有一個FOR內創建數組bucle,其實我做手工....

success: function(data) { 
         var data_array = [ 
          {y:data[0]['date'], a:data[0]['validated'], b:data[0]['revenue'], c:data[0]['costes']}, 
          {y:data[1]['date'], a:data[1]['validated'], b:data[1]['revenue'], c:data[1]['costes']} 
         ]; 

請幫忙

+0

只需循環遍歷所有json對象,並用data_array.push(your_object) – NeuTronas

+0

將它們推送到您的數據數組中,可以指定更多請求嗎? @NeuTronas –

+0

@SergioSuarez看看我的答案的第一個選擇。這就是他正在談論的。 –

回答

0

在您的實際代碼,您總是返回兩個元素的數組,這不會給你所期望的結果。

您應該聲明一個空數組,並在每次迭代中將自定義對象推送給它。

success: function(data) { 
    var data_array = []; 
    data.forEach(function(obj) { 
    data_array.push({ 
     y: obj['date'], 
     a: obj['validated'], 
     b: obj['revenue'], 
     c: obj['costes'] 
    }); 
    }); 
    fooDone(data_array); 
}, 

你可以使用.map()方法從您的data陣列創建自定義的數組,這是應該的代碼:

success: function(data) { 
    var data_array = data.map(function(obj) { 
    return { 
     y: obj['date'], 
     a: obj['validated'], 
     b: obj['revenue'], 
     c: obj['costes'] 
    }; 
    }); 
    fooDone(data_array); 
}, 

爲了您data陣列的每個object它會返回一個自定義的object與請求的屬性。

+0

完美的作品!謝謝@chsdk –

+0

@SergioSuarez太棒了,很高興它有幫助。 –

0

使用Array.prototype.map從的函數中創建一個新的數組數組。

var data = [ 
 
    { date: '2017-01', validated: 50, revenue: 90, costes:110}, 
 
    { date: '2017-02', validated: 65, revenue: 75, costes:120}, 
 
    { date: '2017-03', validated: 50, revenue: 50, costes:10}, 
 
    { date: '2017-04', validated: 75, revenue: 60, costes:170}, 
 
    { date: '2017-05', validated: 80, revenue: 65, costes:60}, 
 
    { date: '2017-06', validated: 90, revenue: 70, costes:30}, 
 
    { date: '2017-07', validated: 100, revenue: 75, costes:10}, 
 
    { date: '2017-08', validated: 115, revenue: 75, costes:0}, 
 
    { date: '2017-09', validated: 120, revenue: 85, costes:0} 
 
]; 
 
var data_array = data.map(e => ({y: e.date, a: e.validated, b: e.revenue, c: e.costes})); 
 
console.log(data_array);

+0

@Barman語法錯誤:缺少;在發表聲明之前[Sabermás]我得到了這個錯誤。 –

+0

添加括號以修復箭頭函數中的語法歧義。 – Barmar

+0

也謝謝你。這似乎也工作 –