- Published on
๐ ์ปฌ๋ฌ๋ฆฌ์คํธ ํ๋ก์ ํธ #22 ๋ฌด์์(shuffle) ํจ์ ์ฌ์ฉ
- ๊ธ์ด์ด
๐
๋ฉ์ธ ํ์ด์ง ์๋จ์ ์บ๋ก์ ์์ ๋ฌธ์ ์ ๋ชฉ ๋งํฌ๋ฅผ ๋ฌด์์๋ก ๋ฃ์ด์ฃผ๋ ค๊ณ ํ๋ค.
์ผ๋จ ๋ฌธ์ ๋ชฉ๋ก์ ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก
import { problemList } from "../qlists/problemList";
๋ฌธ์ ๋ชฉ๋ก์ด ์ ํ ํ์ผ์์ problemList๋ฅผ ๋ถ๋ฌ์จ๋ค.
๊ทธ ๋ค์ map
ํจ์๋ฅผ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํ๋์ฉ ๊บผ๋ด์ด ์บ๋ก์
์ ๋ฃ์ด์ค๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ฅผ ๊บผ๋ด์ด ๋ฃ์ผ๋ ์์๊ฐ ๋ฐ๋์ง ์์ ์ํ๋ก ๋ฌธ์ ๋ค์ด ์บ๋ก์
์์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ผ๋ก
์ฐพ์ shuffle
ํจ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ด์ฉํด ๋จผ์ ๋ฌธ์ ๋ชฉ๋ก์ ์๊ฒ ๋ณต์ฌํด์จ๋ค shuffle
ํจ์๋ฅผ ๋ง๋ค๊ณ ๋ถ์ ํจ๊ณผ๋ก
๋ฌด์์๋ก ์์ธ ๋ฐฐ์ด์ ๋ค์ ๋ฐํํด์จ๋ค.
function shuffle<T>(array: T[]) {
const copied = [...array]
copied.sort(() => Math.random() - 0.5) //๋ถ์ ํจ๊ณผ
return copied
}
์ฌ๊ธฐ์ ๋ถ์ ํจ๊ณผ๋, ~์ธ๋ฐ ํจ์์ ์ด๋ค ๊ฐ์ ๋ฃ์์ ๋ ๋ฐํ๊ฐ์ด ๋ณํ๋ ๊ฒ๋ ๋ถ์ ํจ๊ณผ ์ค์ ํ๋์ด๋ค.
๋ถ์ํจ๊ณผ ์ค์๋
- ๋ฌด์์๋ก ๊ฐ์ด ์์ด๋ ๊ฒ
- ๊ธฐ์กด์ ๊ฐ์ ๋ณํํ๋ ๊ฒ
- ์ธ๋ถ์ ์ ์ถ๋ ฅ์ ํ๋ ๊ฒ ์ด ์๋๋ฐ,
- ๋ฌด์์๋ก ๊ฐ์ด ์์ด๋ ๊ฒ -> seed๋ก ํด๊ฒฐ
- ๊ธฐ์กด์ ๊ฐ์ ๋ณํํ๋ ๊ฒ -> ๋ถ๋ณ๊ณผ ๋ณต์ฌ๋ก ํด๊ฒฐ
- ์ธ๋ถ์ ์ ์ถ๋ ฅ์ ํ๋ ๊ฒ -> ์ ์ถ๋ ฅ๊ณผ ํต์ฌ ๋ก์ง์ ๋ถ๋ฆฌ๋ก ํด๊ฒฐ ์ด๋ฌํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ํ๋ค.
์ฐธ๊ณ ๋ก ๋ถ์ ํจ๊ณผ๊ฐ ์ผ์ด๋์ง ์๋ ํจ์๋ pure function
, ์์ ํจ์๋ผ๊ณ ํ๋๋ฐ
๋ค์ ๋์์์ shuffle ํจ์๋ฅผ ํตํด ๋ฐ๋ data
๋ฅผ ๊ฐ์ ธ์์ ์บ๋ก์
์์ ๋ฃ์ด์ค๋ค.
์ด๋ useEffect๋ฅผ ์ฌ์ฉํด ๊ฐ์ด ํ๋ฒ ๋ฐ๋ ๋ค์๋ ๋ฌธ์ ๋ชฉ๋ก์ด ์์ ๋์ง ์๋ํ ๋์ด์ ๋ฐ๋์ง ์๋๋ก ํด์ค๋ค.
useEffect() : ์ฒ์ ๋ฑ ํ๋ฒ๋ง ์คํ๋๋ค. dependency array(์์กด์ฑ ๋ฐฐ์ด)์ด ๋ฐ๋ ๋์๋ง ์คํํด์ค๋ค!
useEffect(shuffleProblems, []) ^ ์ฝ๋ฐฑ ํจ์ ^ ์์กด์ฑ ๋ฐฐ์ด
function Root() {
const [shuffled, setShuffled] = useState([] as typeof problemList);
useEffect(() => {
setShuffled(shuffle(problemList));
}, []);
return (
<>
<Carousel>
{shuffled.map((problem) => (
<Link to={"/quizs/" + problem.id}>
<h3 className="text-3xl">{problem.title}</h3>
</Link>
))}
</Carousel>