๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript Effect

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ : ๊ฒ€์ƒ‰ ํšจ๊ณผ : sort(), reverse()

by ์ฝ”ํŒŒ์นด 2022. 10. 18.
728x90

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ : ๊ฒ€์ƒ‰ ํšจ๊ณผ : sort(), reverse()

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋“ค ์ค‘, ๊ฒ€์ƒ‰ ํšจ๊ณผ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” sort(), reverse() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ, ์•ŒํŒŒ๋ฒณ์ˆœ ๋“ฑ ์†์„ฑ๋“ค์ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌ๋˜๋„๋ก ์ž‘์—…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ์†์„ฑ ์ž‘์„ฑํ•˜๊ธฐ

const cssProperty = [
    { num: 1, name: "accent-color", desc: " ์š”์†Œ์˜ ๊ฐ•์กฐ ์ƒ‰์ƒ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. " },
    { num: 2, name: "align-content", desc: " ์ฝ˜ํ…์ธ  ์‚ฌ์ด์™€ ์ฝ˜ํ…์ธ  ์ฃผ์œ„ ๋นˆ ๊ณต๊ฐ„์„ ํ”Œ๋ ‰์Šค ๋ฐ•์Šค'์˜ ๊ต์ฐจ์ถ• ๋˜๋Š” ๊ทธ๋ฆฌ๋“œ์˜ ๋ธ”๋ก ์ถ•์„ ๋”ฐ๋ผ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 3, name: "align-items", desc: " ๊ต์ฐจ์ถ•์—์„œ ์•„์ดํ…œ ์ •๋ ฌ ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ flex์—์„œ item๋“ค์„ ์ •๋ ฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." },
    { num: 4, name: "align-self", desc: " ํŠน์ • item์˜ ์ •๋ ฌ์„ ๋”ฐ๋กœ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." },
    { num: 5, name: "all", desc: " CSS ์‚ฌ์šฉ์ž ์ง€์ • ์†์„ฑ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์†์„ฑ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊นƒ๊ฐ’, ์ƒ์†๊ฐ’, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์Šคํƒ€์ผ์‹œํŠธ ์ถœ์ฒ˜์˜ ๊ฐ’๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." },
    { num: 6, name: "animation", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ด€๋ จ๋œ ์†์„ฑ์„ ์ผ๊ด„์ ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค." },
    { num: 7, name: "animation-delay", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 8, name: "animation-direction", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›€์ง์ž„ ๋ฐฉํ–ฅ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 9, name: "animation-duration", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›€์ง์ธ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 10, name: "animation-fill-mode", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚œ ํ›„์˜ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 11, name: "animation-iteration-count", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 12, name: "animation-name", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜ keyframe ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 13, name: "animation-play-state", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง„ํ–‰์ƒํƒœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 14, name: "animation-timeline", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ํƒ€์ž„๋ผ์ธ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." },
    { num: 15, name: "animation-timing-function", desc: " ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›€์ง์ž„์˜ ์†๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." }
    // ์ƒ๋žต
]

๋จผ์ €, ์†์„ฑ๋“ค์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” num์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ๊ฐ ์†์„ฑ์— ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

2. ์†์„ฑ ์ถœ๋ ฅํ•˜๊ธฐ

const cssList = document.querySelector(".search__list .line");
const updateList = () => {
    let listCSS = "";
    cssProperty.forEach((data, index) => {
        listCSS += `${data.num}. ${data.name} : ${data.desc}`;
    });
    cssList.innerHTML = listCSS;
}
updateList();

listCSS๋ผ๋Š” ๋นˆ ๋ฌธ์ž์—ด ์•ˆ์— forEach๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ–ˆ๋˜ ๋ฐฐ์—ด ์† ๊ฐ ์†์„ฑ์˜ ๋ฒˆํ˜ธ, ์ด๋ฆ„, ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•ด ์ค€ ๋’ค, innerHTML๋กœ ์ถœ๋ ฅํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

3. ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ

document.querySelector(".btn1").addEventListener("click", (e) => {
    e.preventDefault();
    cssProperty.reverse();
    updateList();
});

btn1์€ '๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ, reverse() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

4. ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ

document.querySelector(".btn2").addEventListener("click", (e) => {
    e.preventDefault();
    cssProperty.sort((a,b) => {
        return a.num - b.num;
    });
    updateList();
});
document.querySelector(".btn3").addEventListener("click", (e) => {
    e.preventDefault();
    cssProperty.sort((a,b) => {
        return b.num - a.num;
    });
    updateList();
});

btn2๋Š” '๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ', btn3์€ '์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ์•ŒํŒŒ๋ฒณ์ˆœ ์ •๋ ฌํ•˜๊ธฐ

document.querySelector(".btn4").addEventListener("click", (e) => {
    e.preventDefault();
    cssProperty.sort((a, b) => {
        let x = a.name;
        let y = b.name;
        return x.localeCompare(y);
    });
    updateList();
});
document.querySelector(".btn5").addEventListener("click", (e) => {
    e.preventDefault();
    cssProperty.sort((a, b) => {
        let x = a.name;
        let y = b.name;
        return y.localeCompare(x);
    });
    updateList();
});

btn4๋Š” '์•ŒํŒŒ๋ฒณ์ˆœ(a-z) ์ •๋ ฌํ•˜๊ธฐ', btn5๋Š” '์•ŒํŒŒ๋ฒณ์ˆœ(z-a) ์ •๋ ฌํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•ŒํŒŒ๋ฒณ ์ •๋ ฌ์˜ ๊ฒฝ์šฐ, ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๋Š” localeCompare() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์™€ ๊ฐ™์ด ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ๋žœ๋ค ์ •๋ ฌํ•˜๊ธฐ

document.querySelector(".btn6").addEventListener("click", (e) => {
    e.preventDefault();
    for(let i=cssProperty.length-1; i>=0; i--){
        const randomIndex = Math.floor(Math.random() * (i+1));
        [cssProperty[i], cssProperty[randomIndex]] = [cssProperty[randomIndex], cssProperty[i]];
        cssProperty.innerHTML += cssProperty[i]
    }
    updateList();
});

๋งˆ์ง€๋ง‰์œผ๋กœ, btn6์€ '๋žœ๋ค ์ •๋ ฌํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์œ„ ๋ฐฉ๋ฒ•์€ ํ”ผ์…” ์˜ˆ์ด์ธ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
Math.random() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 0์—์„œ 1 ์‚ฌ์ด์˜ ๋‚œ์ˆ˜๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ •์ˆ˜์˜ ๊ฐ’์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, cssProperty์˜ ๊ธธ์ด๋งŒํผ ๊ณฑํ•ด์ค€ ๋’ค, ์†Œ์ˆ˜์ ์„ ์ œ๊ฑฐํ•ด ์ค๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ randomIndex๋ฅผ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ์ค‘๋ณต๋œ ๊ฐ’์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ์ด์šฉํ•ด ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•ด ์ค๋‹ˆ๋‹ค. ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ๊ทธ๋ƒฅ ์™ธ์šฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๊ฒฐ๊ณผ

728x90

๋Œ“๊ธ€

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฆ™

CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘