如何将数组划分为nodejs中的相等部分

我是nodejs的新手,我需要划分一个数组,其中包含X轴上的date和Y轴上的点,并试图绘制一个graphics使用数组来存储数据的X和Y轴做到这一点,我这样做:

while(startDate <= endDate) { arr.push({x:startDate.toISOString().slice(0,10),y: 0}); startDate.setDate(startDate.getDate() + 1); } 

它将存储从开始date到结束date的所有date,现在我需要将它分成几周,所以我通过以下方法查找周:

 var Weeks = Math.round((endDate - startDate) / (7 * 24 * 60 * 60 * 1000)); 

现在去哪个date有一个点,所以我做:

 for (var i = doc.length - 1; i >= 0; i--) { for (var j = arr.length - 1; j >= 0; j--) { if (arr[j].x == doc[i].deal_end_date) { arr[j].y ++; } } } } 

现在这会给我一个输出如下:

 startDate: 2017-07-10, endDate: 2017-07-31 arr : [ { x: '2017-07-10', y: 1 }, { x: '2017-07-11', y: 0 }, { x: '2017-07-12', y: 0 }, { x: '2017-07-13', y: 0 }, { x: '2017-07-14', y: 0 }, { x: '2017-07-15', y: 1 }, { x: '2017-07-16', y: 0 }, { x: '2017-07-17', y: 0 }, { x: '2017-07-18', y: 0 }, { x: '2017-07-19', y: 0 }, { x: '2017-07-20', y: 0 }, { x: '2017-07-21', y: 0 }, { x: '2017-07-22', y: 0 }, { x: '2017-07-23', y: 0 }, { x: '2017-07-24', y: 0 }, { x: '2017-07-25', y: 0 }, { x: '2017-07-26', y: 0 }, { x: '2017-07-27', y: 0 }, { x: '2017-07-28', y: 0 }, { x: '2017-07-29', y: 0 }, { x: '2017-07-30', y: 0 }, { x: '2017-07-31', y: 0 } ] 

现在我需要把这个arrays分成几个星期,我尝试了

 var i,j,temparray,chunk = Weeks; for (i=0,j=arr.length; i<j; i+=chunk) { temparray = arr.slice(i,i+chunk); } 

但它存储在temparray中:

 temparray: [ { x: '2017-07-31', y: 0 } ] 

我需要我的temparray如下:

 startDate: 2017-07-01 endDate: 2017-07-28 Weeks: 4 /*temparray[1] should be from arr[0] to arr[6]*/ temparray[1] : [ { x: '2017-07-01', y: 0 }, { x: '2017-07-02', y: 0 }, { x: '2017-07-03', y: 0 }, { x: '2017-07-04', y: 0 }, { x: '2017-07-05', y: 1 }, { x: '2017-07-06', y: 0 }, { x: '2017-07-07', y: 0 }] /*temparray[2] should be from arr[7] to arr[13]*/ temparray[2] : [ { x: '2017-07-08', y: 0 }, { x: '2017-07-09', y: 0 }, { x: '2017-07-10', y: 0 }, { x: '2017-07-11', y: 0 }, { x: '2017-07-12', y: 0 }, { x: '2017-07-13', y: 0 }, { x: '2017-07-14', y: 0 }] /*temparray[3] should be from arr[14] to arr[20]*/ temparray[3] : [ { x: '2017-07-15', y: 0 }, { x: '2017-07-16', y: 0 }, { x: '2017-07-17', y: 0 }, { x: '2017-07-18', y: 0 }, { x: '2017-07-19', y: 0 }, { x: '2017-07-20', y: 0 }, { x: '2017-07-21', y: 0 }] /*temparray[4] should be from arr[21] to arr[27]*/ temparray[4] : [ { x: '2017-07-22', y: 0 }, { x: '2017-07-23', y: 0 }, { x: '2017-07-24', y: 0 }, { x: '2017-07-25', y: 0 }, { x: '2017-07-26', y: 0 }, { x: '2017-07-27', y: 0 }, { x: '2017-07-28', y: 0 }] 

使用fillmap解决scheme:

 function splitArray(array, chunkSize) { return Array(Math.ceil(array.length/chunkSize)).fill().map(function(_,i) { return array.slice(i * chunkSize, i * chunkSize + chunkSize); }); } var results = splitArray([1,2,3,4,5,6,7,8], 3); console.log(results); 

正如@Alberto Trindade Tavares回答我所做的那样:

 /* arr is my original array */ var ressu = splitArray(arr, 7); function splitArray(arr, chunkSize) { return Array(Math.ceil(arr.length/chunkSize)).fill().map(function(_,i) { return arr.slice(i * chunkSize, i * chunkSize + chunkSize); }); }