配列に1時間毎のデータが1年分格納されています。
この配列を日別のデータに変換し、新しい配列に格納する方法について書きます。
やること
- 配列をx個ごとに分割する
- 分割した配列内の累計をy回出す
- 新しい配列に累計を入れる
今回の場合、x=24,y=365
引用
配列をn個ごとに分割する関数
const sliceByNumber = (array, number) => {
const length = Math.ceil(array.length / number)
return new Array(length).fill().map((_, i) =>
array.slice(i * number, (i + 1) * number)
)
}
累計を出す
var result = array.reduce(function (accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
});
コード
var array1 = [1, 2, 3, 1, 2, 3, ...];//省略
const sliceByNumber = function(array, number){
const length = Math.ceil(array.length / number)//Math.ceilで引数以上の最小の整数を返す
return new Array(length).fill().map(function(_, i){
return array.slice(i * number, (i + 1) * number);
}//_はcurrentValueが空の意。iは配列のインデックス/添字
)//fillがインデックス付き配列を返す。mapは与えられた関数を配列のすべての要素に対して呼び出し、返された値を追加
}
array2 = sliceByNumber(array1, 24);//配列の分割。array2.lengthは365
newArray = new Array();//新しい配列を作成
for(var i = 0; i < array2.length; i++){
var result = array2[i].reduce(function (accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
});
newArray[i] = result;//累計を新しい配列に格納。それを365回繰り返す
}
引用元の著者に感謝です。
ありがとうございました。