はじめに
こんにちはプログラマー2年目の塚田と申します。
今回はJavaScriptでのフォルダサイズ取得について書きたいと思います。
フォルダサイズを取得するにあたってありがちなのがこの書き方
var files = 取得したフォルダ;
var folderSize = 0;
for(int i=0;i<files.length;i++){
folderSize = folderSize + files[i].size;
}
console.log(folderSize);
以上の書き方でフォルダ配下の合計ファイルサイズが求められると思います。file.sizeでファイルサイズは取得できるのにfolder.sizeでフォルダサイズが取得できないのはなんでだろ。。。私、気になります。
それはそうとfor文を使わないで書けないかなと思い、調べてヒットしたのがこちら
var files = 取得したフォルダ;
int folderSize =
Array.from(files).reduce((acc,files) => acc + files.size,0)
console.log(folderSize);
まずArray.fromで配列風のオブジェクトを実際の配列にします。
実際の配列にすることで受け取ったフォルダを操作しやすい配列に変換します。
次に .reduce() とは、配列の各要素に対して累積計算を行います。
今回の場合、各fileのsizeプロパティを累積的に加算します。
そしてaccはその累積値を保持します。初期値は0。
つまりaccに現在のファイルサイズを加算します。
最後に書いてある「,0」は.reduce()の初期値を設定しています。
この0というのが最初のaccに格納されます。
おわりに
どうでしょうか。つい先日私も実装してみたばかりですが、for文無しでも一文で書けることに感動しました。
今後もコードの書き方についても投稿していきたいと思います。
以上、塚田でした。