1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

配列をx個に分割し、配列ごとの累計を新しい配列に格納する

Posted at

配列に1時間毎のデータが1年分格納されています。
この配列を日別のデータに変換し、新しい配列に格納する方法について書きます。

やること

  1. 配列をx個ごとに分割する
  2. 分割した配列内の累計をy回出す
  3. 新しい配列に累計を入れる

今回の場合、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回繰り返す
}

引用元の著者に感謝です。
ありがとうございました。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?