본문 바로가기
EFFECT/SEARCH

EFFECT | SEARCH | sort( ), reverse( )를 이용하여 정렬하기

by 코딩하자9 2022. 10. 17.
728x90

searchEffect | sort(), reverse()를 이용하여 정렬하기

오늘의 목표
💡 여러 정렬 구현하기(오름차순, 내림차순, 알파벳순, ...)
💡 랜덤 정렬하기 💡 카테고리별 정렬하기


1. 사이트 구조 살펴보기

HTML 살펴보기

속성 목록은 자바스크립트로 표현해주기 위해 비워두었습니다.

<main id="main">
    <div class="search__wrap">
        <span>sort(), reverse()를 이용하여 정렬하기</span>
        <h1>CSS 속성 정렬하기</h1>

        <div class="search__click">
            <ul>
                <li><a href="#" class="btn1">반대로 정렬하기</a></li>
                <li><a href="#" class="btn2">오름차순 정렬하기</a></li>
                <li><a href="#" class="btn3">내림차순 정렬하기</a></li>
                <li><a href="#" class="btn4">알파벳순(a~z)</a></li>
                <li><a href="#" class="btn5">알파벳순(z~a)</a></li>
                <li><a href="#" class="btn6">랜덤 정렬하기</a></li>
                <li><a href="#" class="btn7">카테고리별 정렬하기</a></li>
            </ul>
            <ul class="btnCate">
                <li data-cate="animation"><a href="#">animation</a></li>
                <li data-cate="background"><a href="#">background</a></li>
                <li data-cate="border"><a href="#">border</a></li>
                <li data-cate="column"><a href="#">column</a></li>
                <li data-cate="flex"><a href="#">flex</a></li>
                <li data-cate="font"><a href="#">font</a></li>
                <li data-cate="grid"><a href="#">grid</a></li>
                <li data-cate="inset"><a href="#">inset</a></li>
                <li data-cate="line"><a href="#">line</a></li>
                <li data-cate="list"><a href="#">list</a></li>
                <li data-cate="margin"><a href="#">margin</a></li>
                <li data-cate="mask"><a href="#">mask</a></li>
                <li data-cate="max"><a href="#">max</a></li>
                <li data-cate="min"><a href="#">min</a></li>
                <li data-cate="offset"><a href="#">offset</a></li>
                <li data-cate="outline"><a href="#">outline</a></li>
                <li data-cate="overflow"><a href="#">overflow</a></li>
                <li data-cate="overscroll"><a href="#">overscroll</a></li>
                <li data-cate="padding"><a href="#">padding</a></li>
                <li data-cate="scroll"><a href="#">scroll</a></li>
                <li data-cate="text"><a href="#">text</a></li>
                <li data-cate="transform"><a href="#">transform</a></li>
                <li data-cate="transition"><a href="#">transition</a></li>
                <li data-cate="etc"><a href="#">etc</a></li>
            </ul>
        </div>
        
        <div class="search__info">
            <div>
                CSS 속성 갯수 : <span class="num">382</span>
            </div>
        </div>

        <div class="search__list">
            <ul class="line"></ul>
        </div>
    </div>
</main>

2. script 살펴보기

📌 sort( ) 활용하여 정렬하기

sort( )를 이용하여 속성을 내림차순/오름차순/알파벳순/카테고리별로 정렬해주었습니다. 자세한 코드는 아래를 확인해주세요 !

📌 random( ) 활용하여 정렬하기

random( )을 이용하여 중복없이 무작위로 숫자가 나오도록 설정하여 index값에 대입해 랜덤 정렬을 설정해주었습니다.

<script>
    const cssProperty = [...]
    const cssList = document.querySelector(".search__list .line");
    const cssCategory = document.querySelectorAll(".btnCate li a");
    
    // 데이터 출력하기
    const updateList = () => {
        let listCSS = "";
        
        cssProperty.forEach((data, index) => {
            listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} ${data.category}
  • `; }); cssList.innerHTML = listCSS; // console.log(listCSS) } updateList(); // 반대로 정렬 function sortReverse(){ cssProperty.reverse(); updateList(); } // 내림차순 정렬 function sortDescending(){ cssProperty.sort((a,b) => { return b.num - a.num; }) updateList(); } // 오름차순 정렬 function sortAscending(){ cssProperty.sort((a,b) => { return a.num - b.num; }) updateList(); } // a~z (미션) function sortAlphabet(){ cssProperty.sort((a, b) => { let x = a.name; let y = b.name; return x.localeCompare(y); }); updateList(); } // z~a (미션) function sortAlphabetZ(){ cssProperty.sort((a, b) => { let x = a.name; let y = b.name; return y.localeCompare(x); }); updateList(); } // 랜덤 정렬 function shuffle(){ for( let i = cssProperty.length-1; i >= 0; i--){ const randomIndex = Math.floor(Math.random() * (i + 1)); // console.log(randomIndex); // 중복없이 무작위로 숫자 나오게 설정 [cssProperty[i], cssProperty[randomIndex]] = [cssProperty[randomIndex], cssProperty[i]]; cssProperty.innerHTML += cssProperty[i]; } updateList(); } // 카테고리별 정렬 function sortCate(){ cssProperty.sort((a, b) => { let x = a.category; let y = b.name; console.log(y) return x.localeCompare(y); }); updateList(); } // 반대로 정렬 클릭 document.querySelector(".btn1").addEventListener("click", ()=>{ sortReverse(); }); // 내림차순 정렬 클릭 document.querySelector(".btn3").addEventListener("click", ()=>{ sortDescending(); }); // 오름차순 정렬 클릭 document.querySelector(".btn2").addEventListener("click", ()=>{ sortAscending(); }); // a~z 정렬 클릭 document.querySelector(".btn4").addEventListener("click", (e) => { e.preventDefault(); sortAlphabet(); }); // z~a 정렬 클릭 document.querySelector(".btn5").addEventListener("click", (e) => { e.preventDefault(); sortAlphabetZ(); }); // 랜덤 정렬 클릭 // return Math.random() - cssProperty.length/2 document.querySelector(".btn6").addEventListener("click", (e)=>{ e.preventDefault(); shuffle(cssProperty); }); // 카테고리 정렬 클릭 document.querySelector(".btn7").addEventListener("click", (e) => { e.preventDefault(); sortCate(); }); // 카테고리 단어별 function updateList2(list){ listCSS = ''; for(const data of list){ switch(data.category){ case "animation": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} animation
  • `; break; case "background": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} background
  • `; break; case "border": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} border
  • `; break; case "column": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} column
  • `; break; case "flex": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} flex
  • `; break; case "break": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} break
  • `; break; case "font": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} font
  • `; break; case "grid": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} grid
  • `; break; case "inset": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} inset
  • `; break; case "line": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} line
  • `; break; case "list": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} list
  • `; break; case "margin": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} margin
  • `; break; case "mask": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} mask
  • `; break; case "max": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} max
  • `; break; case "min": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} min
  • `; break; case "offset": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} offset
  • `; break; case "outline": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} outline
  • `; break; case "overflow": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} overflow
  • `; break; case "overscroll": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} overscroll
  • `; break; case "padding": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} padding
  • `; break; case "scroll": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} scroll
  • `; break; case "text": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} text
  • `; break; case "transform": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} transform
  • `; break; case "transition": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} transition
  • `; break; case "etc": listCSS += `
  • ${data.num}. ${data.name} : ${data.desc} etc
  • `; break; default: listCSS += `
  • 해당하는 카테고리가 없습니다.
  • `; break; } } cssList.innerHTML = listCSS; } updateList2(cssProperty); // 카테고리 버튼 클릭 cssCategory.forEach(cate => { cate.addEventListener("click", (e) => { e.preventDefault(); const targetCate = cate.dataset.cate; const filterList = cssProperty.filter(data => data.category == targetCate); updateList2(filterList); }); }); </script>

    'EFFECT > SEARCH' 카테고리의 다른 글

    EFFECT | SEARCH | filter()를 이용하여 속성의 중요도 보여주기  (0) 2022.10.17
    SEARCH | 검색 유형04  (6) 2022.09.29
    SEARCH | 검색 유형03  (8) 2022.08.22
    SITE | 검색유형 | includes( )  (2) 2022.08.17
    SEARCH | 검색 유형01  (9) 2022.08.17

    댓글


    It's cording time

    코딩 여기서 정리하고 배워보자구 :9

    광고 준비중입니다.