$bookmark.addEventListener('click',() => {
const $movieCards = document.querySelectorAll('.movieCard');
const bookmarkedMovies = handleBookmark('get');
const newRenderData = movieData.filter(({id}) => bookmarkedMovies.includes(id));
$movieCards.forEach((card) => card.remove());
if(newRenderData.length === 0){
//๊ธฐ์กด์ ์ด๋ฏธ ํด๋น ์์('๋ถ๋งํฌ๋ ์ํ๊ฐ ์์ต๋๋ค.')๊ฐ ์ถ๊ฐ๋์ด ์์ผ๋ฉด ์ถ๊ฐํ์ง ์๊ธฐ ์ํด ๋ถ๊ธฐ ์ฒ๋ฆฌ
if (!$main.querySelector('.noMovie')) {
const noBookmarkedMovie = document.createElement('div');
noBookmarkedMovie.className = 'noMovie';
noBookmarkedMovie.textContent = '๋ถ๋งํฌ๋ ์ํ๊ฐ ์์ต๋๋ค.';
$main.appendChild(noBookmarkedMovie);
}
} else renderMoviCard(newRenderData);
})
handleBookmard('get')์ localStorage์ ์ ์ฅ๋ ๊ฐ๋ค์ ๋ฐฐ์ด๋ก ๋ฐํํ๋ ํจ์์ด๋ค.
localStorage์ ์ ์ฅ๋ ๊ฐ๋ค์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ง๋ค์ด newRenderData์ ํ ๋นํ๋ค.
renderMovieCard(newRenderData)๋ฅผ ํตํด ํ๋ฉด์ ์๋กญ๊ฒ ๊ทธ๋ฆฐ๋ค. (๋ถ๋งํฌ ๋ ์ ๋ค์ ๋ณผ ์ ์์)
์ฌ๊ธฐ์ ๋ฌธ๋ ๋ ์๊ฐ..
movieData๋ฅผ filterํ๋ฉด movieData๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ํ ๋ฒ ์ํํ ํ ๊ณ
bookmarkedMovies์ id๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ ค๋ฉด bookmarkedMovies๋ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ๋ฅผ ํด์ผ ํ ํ ๋ฐ
์ํ๋ฅผ ํ๋๋ฐ ๊ทธ ์์์ ๋ ์ํ๋ฅผ ํ๋ค๋ผ..
์ด ์ฝ๋ ๊ด์ฐฎ์ ๊ฑฐ ๋ง๋? ๋ญ๊ฐ ์ต์ ์ด ์๋ ๊ฑฐ ๊ฐ์ ๋๋์ ์ธ ๋๋..
์! Set์ ์จ๋ณผ๊น? Set์ด ๊ฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค๋ ์๊ธฐ๋ฅผ ์์ ์ ๋ค์๋ ๊ฑฐ ๊ฐ์๋ฐ.
์ฌ์ค Set์ ๋ํด ์ ๋ชจ๋ฅด๊ธฐ๋ ํ๊ณ ์ผ๋จ ์์๋ ๋ณด์.
์ด๋ฐ ์๊ฐ ํ๋ก๋ก ์ค๋ ์ด ๊ธ์ ์ฐ๊ฒ ๋์๋ค!
์ผ๋จ ๋์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ์์๋ณด์.
๋ฐฐ์ด(Array)์ Set์ ๋ ๋ค ๊ฐ์ ํ์ ์ ์ฌ๋ฌ ๊ฐ๋ค์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ค๋ง ๋ฐฐ์ด์
- index๊ฐ ์์ด ์์๊ฐ ์ค์ํ๊ณ ๊ฐ์ด ์ค๋ณต๋ ์ ์๋ค.
- ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ๋๋ค๋ฉด ๋ฐฐ์ด ์์ ์๋ ๋ชจ๋ ๊ฐ๋ค์ ์ํํด์ผ ํ๋ค.
- ๋ฐ๋ผ์ ํน์ ๊ฐ์ ์ฐพ๋๋ฐ, ์ํํ๋ ๋ฐฐ์ด ๋ฐ์ดํฐ๊ฐ ํฌ๋ค๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๋ฐ๋ฉด Set์
- ๋ด๋ถ์ ์ผ๋ก ๊ฐ(ํน์ ํค)๋ฅผ ์ ์ฅํ ๋ ํด์๊ฐ์ ๊ณ์ฐํด์ ๋ฐ์ดํฐ๋ฅผ ํน์ ์์น์ ์ ์ฅํ๋ค.
- ๋ฐ๋ผ์ ๊ฐ์ ๊ฐ์ ์ ์ฅํ๋ ค๊ณ ํ๋ฉด ํด๋น ๊ฐ์ ๊ฐ๊ณ ์๋ ํด์ ๊ฐ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ผ๋ก ์ ์ฅํ์ง ์๋๋ค.(๊ฐ ์ค๋ณต ์ ์ฅ ๋ถ๊ฐ)
- ์ฆ Set์ ๊ณ ์ ํ ๊ฐ๋ค๋ง ์ ์ฅํ๋ค.
- ํด์๊ฐ์ผ๋ก ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์ค์ํ์ง ์๊ณ
- ํน์ ๊ฐ์ ์ฐพ์ ๋์๋ ๋ชจ๋ ๊ฐ๋ค์ ์ํํ ํ์ ์์ด has ๋ฉ์๋๋ก ๋ฐ๋ก ํด๋น ํด์ ๊ฐ์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ธ๋ฐฉ ์ฐพ์ ์ ์๋ค.
๊ทธ๋ผ ๋ฌด์กฐ๊ฑด Set์ ์ฐ๋ ๊ฒ ์ข์ ๊ฑด๊ฐ??
That' a nono!
Array๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐฐ์ด ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ถํ์ํ๋ค.
ํ์ง๋ง Set์ ๊ฐ๋ค์ ๋ค์ ํด์๊ฐ์ผ๋ก ๊ณ์ฐํด ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ฆ, Set์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ ํฌ๋ค.
๋์ Set์ ์คํ ์๋๊ฐ ๋นจ๋ผ CPU์ ๋ถํ๋ฅผ ์ค์ฌ์ฃผ๋ ๋ฐ๋ฉด Array๋ ๋ฐ์ดํฐ๊ฐ ํด์๋ก CPU์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ๋ค๋ฉด Array๋ฅผ ์ฌ์ฉํ๊ณ
๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํฌ๊ฑฐ๋ ์๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ๋ค๋ฉด Set์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๊ฒ ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋ด๊ฐ ๊ณ ๋ฏผํ๋ ์ฝ๋๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ Array๋ฅผ ์ฌ์ฉํด๋ ํฐ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์ธ๋ค.
๊ทธ๋๋ Set์ ๊ณต๋ถํ์ผ๋ ํ ๋ฒ ์ ์ฉํด ๋ณด์๋ค.
$bookmark.addEventListener('click',() => {
const $movieCards = document.querySelectorAll('.movieCard');
const bookmarkedMovies = new Set(handleBookmark('get'));
const newRenderData = movieData.filter(({id}) => bookmarkedMovies.has(id));
$movieCards.forEach((card) => card.remove());
if(newRenderData.length === 0){
//๊ธฐ์กด์ ์ด๋ฏธ ํด๋น ์์('๋ถ๋งํฌ๋ ์ํ๊ฐ ์์ต๋๋ค.')๊ฐ ์ถ๊ฐ๋์ด ์์ผ๋ฉด ์ถ๊ฐํ์ง ์๊ธฐ ์ํด ๋ถ๊ธฐ ์ฒ๋ฆฌ
if (!$main.querySelector('.noMovie')) {
const noBookmarkedMovie = document.createElement('div');
noBookmarkedMovie.className = 'noMovie';
noBookmarkedMovie.textContent = '๋ถ๋งํฌ๋ ์ํ๊ฐ ์์ต๋๋ค.';
$main.appendChild(noBookmarkedMovie);
}
} else renderMoviCard(newRenderData);
})
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Array.prototype.splice() (0) | 2025.01.16 |
---|---|
[JavaScript] ๊ณ ์ฐจ ํจ์์ ๋ช์ ๋น ์ง ๋ (0) | 2025.01.16 |
[JavaScript] ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํด๋ณด์ ! Debouncing๊ณผ Throttling (0) | 2025.01.14 |
[JavaScript] ์ด๋ฒคํธ ์์์ด ๋ญ์ฃ ?? ( feat . closest, classList ) (0) | 2025.01.13 |
[JS] ๋ฐ๋๋ผJS / ๋ด๊ฐ ์ ํํ key๊ฐ์ ์ด๋ป๊ฒ ๋๊ฒจ๋ฐ๋.. dataset์ ์ด๋ค๋ฐ (0) | 2025.01.09 |