İçeriğe geç

Liste sayfalama bilgisi

Web / frontend · Zorluk 2/5 · JavaScript · 30 satırKöken: Kurgu

Görev

Yapay zekâdan istenen

Ürün listesinin sayfalama çubuğu için getPageInfo(requestedPage, totalItems, pageSize) yaz. requestedPage adresten gelen tam sayıdır; aralık dışındaysa en yakın geçerli sayfaya çek. pageSize pozitif tam sayıdır. Döndür: geçerli sayfa, toplam sayfa, 11–20 / 45 biçiminde etiket, önceki ve sonraki sayfa var mı, ve en çok 5 sayfa numarası (geçerli sayfa mümkünse ortada). Hiç ürün yoksa tek bir boş sayfa olur, etiketi 0–0 / 0.

Teslim notu

Yapay zekâ kodu teslim ederken şunu yazdı:

“Sayfa numarası her zaman geçerli aralığa çekiliyor, boş liste de ele alındı. Etiket ve sayfa numaraları her durumda doğru.”

Yapay zekânın yazdığı kod

JavaScript30 satır

Hatalı bulduğun satırları işaretle; her işarete önem seç ve nedenini bir cümleyle yaz.

Satıra tıkla ya da dokun. Klavyede satıra gidip Enter'a bas.

0/5 işaret
Önem nasıl seçilir
  • KritikVeri kaybı, güvenlik açığı ya da para kaybı
  • ÖnemliGörevin istediği bir durumda kullanıcı yanlış sonuç alır
  • KüçükGörevin dışında kalan nadir bir uç durum ya da okunurluk

Test konusunda önem, testin yakalamadığı hatalı uygulamanın etkisine göre belirlenir.

Gerekçe puanlanmaz; sonuçta örnek cevapla karşılaştırırsın.

const VISIBLE_PAGES = 5;
2
function visiblePages(page, totalPages) {
  const half = Math.floor(VISIBLE_PAGES / 2);
  const start = Math.max(
    1,
    Math.min(page - half, totalPages - VISIBLE_PAGES + 1),
  );
  const end = Math.min(totalPages, start + VISIBLE_PAGES - 1);
  const pages = [];
  for (let number = start; number <= end; number += 1) {
    pages.push(number);
  }
  return pages;
}
16
export function getPageInfo(requestedPage, totalItems, pageSize) {
  const totalPages = Math.max(1, Math.floor(totalItems / pageSize));
  const page = Math.min(Math.max(requestedPage, 1), totalPages);
  const firstItem = totalItems === 0 ? 0 : (page - 1) * pageSize + 1;
  const lastItem = Math.min(page * pageSize, totalItems);
  return {
    page,
    totalPages,
    label: `${firstItem}–${lastItem} / ${totalItems}`,
    hasPrevious: page > 1,
    hasNext: page < totalPages,
    pages: visiblePages(page, totalPages),
  };
}

Kanıtlayan test

Doğru seçenek, bu kodda başarısız olan, yani hatayı ortaya çıkaran testtir.

Test seçenekleri
Göndermek için en az bir satır işaretle.

Gönderince sayaca yedi bilgi gider; gerekçe metnin cihazında kalır. Veriler