👌

#day21

2023/05/26に公開

Chunk Array

今回実装するのは Chunk Array というものだ。

Use Case

チャンク化するとは与えられた配列を指定されたサイズの小さな部分配列に分割する操作のこと。
例えばYoutubeの動画をサーバーから手元の端末へ配信される場合、普通は30分の動画を30分のまま送ってきたりしない。5秒とか10秒くらいまでの短い時間で分割して細切れになったファイルが送られてくる。Zennも含め多くのWebサイトはページネーションといって、1ページに全ての記事のタイトルを表示するのではなく一定数のタイトルだけを表示し、「次のページ」「前のページ」みたいに複数のページに分割して表示してる。

以下が実装コードだ。

function chunk(inputArray: any[], chunkSize: number): any[][] {
  const chunckedArray: any[][] = [];
  let currentIndex = 0;

  while (currentIndex < inputArray.length) {
    chunckedArray.push(inputArray.slice(currentIndex, currentIndex + chunkSize));
    currentIndex += chunkSize;
  }

  return chunckedArray;
}

つまづいたこと

二次元配列の型をany[][]で書くこと

push()

チャンクされた配列を格納する配列は const で宣言してあるのに、pushを使うと値が中に追加される。pushで追加しているのは配列なので、chunckedArray は二重配列になる。

slice(start, end)

配列の指定された範囲を切り取るために使用される。第一引数には切り取りの開始位置を、第二引数には終了位置を指定する。ただし第二引数の要素は含まれない。
配列のインデックスの数え方は0からはじまるので、返される配列の要素の個数はend - start

例を書いておく

arr = [0,1,2,3,4,5]
console.log(arr.slice(1,3)) // [ 1, 2 ]
console.log(arr.slice(3,4)) // [ 3 ]
console.log(arr.slice(0,4)) // [ 0, 1, 2, 3 ]

感想

今回の問題は簡単だった

Discussion