Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Lập trình Web & Backend] Kết hợp filter + sort + paginate

    Kết hợp filter + sort + paginate

    Một endpoint danh sách thực tế thường thực hiện theo thứ tự: filter → sort → paginate.

    Cho danh sách bản ghi và một query gồm:

    • filter: { "field", "op", "value" } với op ∈ { "eq","gt","gte","lt","lte" } (có thể là null → bỏ lọc)
    • sort: { "field", "dir" } với dir ∈ { "asc","desc" } (có thể là null → giữ thứ tự gốc)
    • page, perPage: phân trang (page từ 1)

    Hãy áp dụng lần lượt và in ra { "total": <số bản ghi sau filter>, "data": [...trang...] }. Sort phải ổn định.

    Ví dụ

    Lọc price ≥ 50, sort price asc, lấy trang 1 perPage 2.

    • Định dạng đầu vào:

      Dòng 1: JSON mảng bản ghi. Dòng 2: JSON object query gồm filter, sort, page, perPage.

    • Ràng buộc đầu vào:

      0 ≤ số bản ghi ≤ 1000; 1 ≤ page; 1 ≤ perPage ≤ 1000.

    • Định dạng đầu ra:

      In object JSON { "total": ..., "data": [...] }. total là số bản ghi sau khi filter (trước phân trang).

    Ví dụ:

    Đầu vào:

    [{"name":"a","price":50},{"name":"b","price":30},{"name":"c","price":80},{"name":"d","price":60}]
    {"filter":{"field":"price","op":"gte","value":50},"sort":{"field":"price","dir":"asc"},"page":1,"perPage":2}
    

    Đầu ra:

    {"total":3,"data":[{"name":"a","price":50},{"name":"d","price":60}]}

    Giải thích:

    Lọc price>=50 → a50,c80,d60 (total=3). Sort asc → 50,60,80. Trang 1 (perPage2) → [a50,d60].

    Đang tải editor...