#104 検索に並び替えとページングを
中段 / 目安 25分
Issue #104 検索に並び替えとページングを
報告者: 栞(司書・文庫の除籍本を出品中)
「本を安い順に、少しずつ見たいんです。全部いっぺんに出ると、目が回ってしまって」
一覧に付ける機能としては定番の2つです。どちらもクエリで受け取ります。
プレーンテキスト
/items?sort=price&limit=2&offset=0ここで必ず踏む落とし穴が2つあります。
1つ目は型です。 クエリの値はすべて文字列で届きます。
JavaScript
const limit = req.query.limit; // "2"
const limit2 = Number(req.query.limit); // 2"2" のまま slice に渡すと、意図しない切り出しになります。数として使うなら必ず直してください。
2つ目は順番です。 処理には正しい順序があります。
プレーンテキスト
並べ替える → 切り出す先に切り出してから並べ替えると、その2件の中だけで並ぶので、全体で見た安い順にはなりません。範囲を狭めるのは最後です。
もう1つ、sort は元の配列を書き換えます。写しを作ってから並べ替えてください。
JavaScript
const sorted = [...items].sort((a, b) => a.price - b.price);完成条件
GET /items に、並び替えとページングを足してください。
sort=priceなら価格の安い順にする。指定が無ければ元の並びのままlimitは返す件数(既定は 2)offsetは飛ばす件数(既定は 0)
処理は並べ替えてから切り出す順です。元の items を壊さないようにしてください。
要件
sort=priceで価格の安い順に並べ替える(元の配列は壊さない)limit(既定 2)とoffset(既定 0)で切り出す- 処理は 並べ替える → 切り出す の順にする
入出力例
request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800},{"id":2,"name":"文庫本セット","price":900}]"
request("GET", "/items?sort=price") → "200 [{"id":2,"name":"文庫本セット","price":900},{"id":4,"name":"木製のスツール","price":3500}]"
request("GET", "/items?sort=price&limit=2&offset=2") → "200 [{"id":1,"name":"レザースニーカー","price":4800},{"id":3,"name":"古着のデニムジャケット","price":6200}]"
request("GET", "/items?limit=10") → "200 [{"id":1,"name":"レザースニーカー","price":4800},{"id":2,"name":"文庫本セット","price":900},{"id":3,"name":"古着のデニムジャケット","price":6200},{"id":4,"name":"木製のスツール","price":3500}]"
request("GET", "/items?limit=4") → "200 [{"id":1,"name":"レザースニーカー","price":4800},{"id":2,"name":"文庫本セット","price":900},{"id":3,"name":"古着のデニムジャケット","price":6200},{"id":4,"name":"木製のスツール","price":3500}]"ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです
ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
編集 ゆめさく編集部