El bug de la semana · 26 de octubre de 2026
La paginación que pierde el último elemento
Un endpoint de listado en una API REST · Lógica · dificultad 1/3
Un compañero le pidió al asistente de IA: "Escribe una función paginate(items, page, pageSize) para nuestro endpoint de listado. Las páginas empiezan en 1. Devuelve los elementos de la página pedida más la información de paginación."
El código llegó en treinta segundos, con tests que pasan. El contrato que promete el docstring:
pageempieza en 1;pageSizees el número máximo de elementos por página.itemscontiene los elementos de la página pedida, en su orden original.totalPageses el número de páginas necesarias para todos los elementos.hasNextestruecuando hay una página después de la pedida.
Revísalo antes de que se integre.
Sin cuenta. Sin pistas. El reloj está corriendo.0 s
Haz clic en la línea (o las líneas) donde está el defecto, elige su categoría y envía. Con el teclado: flechas para moverte, Espacio para marcar. En este modo el código es de solo lectura.
1export type Page<T> = {
2 items: T[];
3 page: number;
4 pageSize: number;
5 totalItems: number;
6 totalPages: number;
7 hasNext: boolean;
8};
9
10/**
11 * Returns page `page` (starting at 1) of `items`, with `pageSize` items per page.
12 */
13export function paginate<T>(items: T[], page: number, pageSize: number): Page<T> {
14 const totalItems = items.length;
15 const totalPages = Math.floor(totalItems / pageSize);
16 const start = (page - 1) * pageSize;
17 const end = start + pageSize;
18 return {
19 items: items.slice(start, end),
20 page,
21 pageSize,
22 totalItems,
23 totalPages,
24 hasNext: page < totalPages,
25 };
26}
0 líneas marcadas