Tema
/
Interneto svetainių kliento dalies kūrimas JS

js/state.js — rikiavimas ir filtravimas

Kodo stulpelyje — js/state.js papildymai: getFilteredFavorites() (paieška + rikiavimas) ir setSort / setPage veiksmai.

getFilteredFavorites daro du dalykus: filtruoja per pavadinimą/pastabas/žymas, tada rikiuoja. Ir čia — klastingas spąstas:

return [...rows].sort((a, b) => { ... });     // ← [...rows] = KOPIJA

Array.prototype.sort() rikiuoja vietoje (in place) — jis keičia patį masyvą ir grąžina jį patį. Jei rašytum state.favorites.sort(...), perrikiuotum saugomus duomenis — ir tada persistFavorites() įrašytų perrikiuotą tvarką į localStorage. Vartotojo „mano kolekcija" tyliai persitvarkytų kaskart rikiuojant lentelę.

[...rows] pirma padaro kopiją, ir rikiuojam ją. Saugomas state.favorites lieka nepaliestas.

// ❌ state.favorites.sort(...)   — sugadina saugomus duomenis
// ✅ [...state.favorites].sort(...) — rikiuoja kopiją

setSort — mažas, bet gudrus: tas pats stulpelis apverčia kryptį, naujas — nustato numatytą (pavadinimui asc, kitiems desc) ir grąžina į 1 puslapį.

Patikrink.

1. Spaudi „Title" antraštę → rikiuoja A→Z; spaudi dar kartą → Z→A (rodyklė apsiverčia).
2. Puslapių mygtukai keičia rodomą pjūvį.
3. Paieška siaurina eilutes ir grąžina į 1 puslapį.

Spąstai (Array.sort mutuoja). Surikiuok lentelę pagal pavadinimą, tada perkrauk puslapį. Jei rikiavai state.favorites tiesiogiai, kolekcija liks perrikiuota (nes įrašei į localStorage) — nors vartotojas nieko „netvarkė". Su [...rows] po perkrovimo grįžta pradinė (išsaugojimo) tvarka. Metodai sort, reverse, splice keičia masyvą; virš saugomų duomenų visada dirbk su kopija.