2016-03-25 121 views
1

我有這樣骨料陣列根據年份和月份

var data = [[1411151400000,1686],[1428604200000,1686],[1411151400000,1686]....] 

我需要組基於這一個月的數據和總結數據,該月的數組。

最終輸出應該看起來像。

var final = [[timestamp for month, sum of value of that month],[]] 

下面是我試過的代碼,但它不給正確的結果,我想,如果它可以通過地圖來實現減少陣列

if(aggregatorType === "month") 
{ 

     sum = 0; 

      $.each(datalooper,function(key,value){ 
       var date = new Date(value[0]); 
       var month = date.toString("MMMM"); 
       var year = date.toString("yyyy"); 
       var temparr = []; 
       var lastdate = 0; 
       if(!iterator[month+"_"+year]){ 
        iterator[month+"_"+year] = value; 
        temparr.push(value[0]); 
        temparr.push(sum); 
        if(sum != 0) 
         newArr.push(temparr); 
        sum = 0; 
       } 
       else{ 
        sum = sum+ value[1]; 
        lastdate=value[0]; 
       } 
      }) 
       totalObj.push(newArr); 
      newArr = []; 
      iterator = {}; 

    } 
    return totalObj; 
} 

回答

0

它得到一年的解決方案和月份,並將其分組。

Date#toString沒有要設置的參數。

使用Date#getYearDate#getMonth檢索年份和月份。

var data = [[1411151400000, 1686], [1428604200000, 1686], [1411151400000, 1686]], 
 
    grouped = function (array) { 
 
     var r = [], o = {}; 
 
     array.forEach(function (a) { 
 
      var date = new Date(a[0]), 
 
       month = date.getMonth() + 1, 
 
       key = date.getFullYear() + '-' + (month < 10 ? '0' : '') + month; 
 
      if (!o[key]) { 
 
       o[key] = [key, 0]; 
 
       r.push(o[key]); 
 
      } 
 
      o[key][1] += a[1]; 
 
     }); 
 
     return r; 
 
    }(data); 
 

 
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');

0

VAR最終= [[時間戳對於月,當月值]和[]

查找個月來首次

var newData = []; 
var months = {}; 
data.forEach(function(value){ 
    var date = new Date(value[0]); 
    date.setDate(1); 
    date.setHours(0,0,0,0); 
    var month = date.getTime(); 
    if(!months[ month ]) 
    { 
     months[ month ] = 0; 
    } 
    months[ month ] += value[1]; 
}); 

現在把它變成一個數組

newData = Object.keys(months).map(function(key){ return [ key, months[key] ]; }); 

這會給你你正在尋找的格式輸出。

+0

還是得從日期解析個月來創建對象鍵 – charlietfl

+0

@charlietfl他的數據數組項第一個值('1411151400000')是用於某個特定月份的時間戳。他可以從中得到月份和年份。 – gurvinder372

+0

這就是我的觀點。該日期爲2014年9月19日,所以答案並不表示將其解析爲一個月 – charlietfl

0

可能會更容易地創建一個對象,然後再映射到你想要的結果對象,這裏有按月份和年份與堆棧映射的對象,如你有

var mappings = datalooper.map(function(v) { 
     var nDate = new Date(v[0]); 
     return { 
      year: nDate.getYear(), 
      month: nDate.getMonth(), 
      data: v[1] 
     }; 
    }).reduce(function(result, curr) { 

     if (result[curr.year] === undefined) { 
      result[curr.year] = {} 
     } 

     if (result[curr.year][curr.month] === undefined) { 
      result[curr.year][curr.month] =[]; 
     } 

     result[curr.year][curr.month].push(data 

     return result; 
}); 
/*if you want to put them in an array do the following 
but not sure how you will keep track of which month is which */ 
return Object.keys(mappings) 
     .map(function(v){ 

      return Object.keys(mappings[v]) 
         .map(function(v){ return v ; }); 
     });