• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 상품 정렬 숙제 질문 있어요!

상품 정렬 숙제 질문 있어요!

  • 이 주제에는 3개 답변, 3명 참여가 있으며 AlgoRoot3 년, 5 월 전에 전에 마지막으로 업데이트했습니다.
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #21432

    헤이미
    참가자

    <!DOCTYPE html>
    <html lang="en">

    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="../reset.css">
      <title>product</title>
      <style>
        .wrap {
          max-width: 800px;
          margin: 0 auto;
        }

        .container {
          width: 800px;
          margin: 30px auto 0 auto;
          display: flex;
          align-items: center;
          justify-content: space-between;
        }

        .product {
          border: 1px solid #ddd;
        }

        .text {
          padding: 10px;
        }

        .text h3 {
          font-size: 20px;
          margin-bottom: 15px;
        }

        .btn {
          margin-top: 20px;
          padding: 10px 20px;
          color: #fff;
          border: none;
          border-radius: 5px;
          background-color: rgb(230, 49, 49);
          cursor: pointer;
        }
      </style>
    </head>

    <body>
      <div class="wrap">
        <div class="container">
          <div class="product">
           
            <div class="text">
              <h3 class="title">Card title</h3>
              <p class="price">price</p>
              <button class="btn">주문하기</button>
            </div>
          </div>
          <div class="product">
           
            <div class="text">
              <h3 class="title">Card title</h3>
              <p class="price">price</p>
              <button class="btn">주문하기</button>
            </div>
          </div>
          <div class="product">
           
            <div class="text">
              <h3 class="title">Card title</h3>
              <p class="price">price</p>
              <button class="btn">주문하기</button>
            </div>
          </div>
        </div>

        <button class="btn price">가격 순 정렬</button>
        <button class="btn priceR">가격 역순 정렬</button>
        <button class="btn name">이름 순 정렬</button>
        <button class="btn nameR">이름 역순 정렬</button>
        <button class="btn down6">6만원 이하</button>
        <button class="btn filter">초기화</button>
      </div>

      <script>
        let container = document.querySelector(".container")
        let item = document.querySelector(".product");
        // 템플릿
        function template(el = "products") {

          let product = document.createElement("div");
          let img = document.createElement("img");
          let text = document.createElement("div");
          let h3 = document.createElement("h3");
          let p = document.createElement("p");
          let btn = document.createElement("button");

          product.className = "product";
          img.src = "https://via.placeholder.com/250";
          text.className = "text";
          h3.className = "title";
          h3.textContent = ${el.title};
          p.className = "price";
          p.textContent = 가격 : ${el.price};
          btn.className = "btn";
          btn.textContent = "주문하기"
         
          product.appendChild(img);
          product.appendChild(text);
          text.appendChild(h3);
          text.appendChild(p);
          text.appendChild(btn);
          container.appendChild(product)
        }

        let products = [{
            title: 'Black Monastery',
            price: 60000
          },
          {
            title: 'Spingfield Shirt',
            price: 50000
          },
          {
            title: 'Blossom Dress',
            price: 70000
          }
        ]

        const sortPrice = document.querySelector("button.price");
        const sortPriceR = document.querySelector("button.priceR");
        const sortName = document.querySelector("button.name");
        const sortNameR = document.querySelector("button.nameR");
        const filter6 = document.querySelector("button.down6");
        const filter = document.querySelector("button.filter");

         //데이터 바인딩
         function data() {
          for (let i = 0; i < products.length; i++) {
            document.querySelectorAll(".title")[i].textContent = products[i].title;
            document.querySelectorAll(".price")[i].textContent = '가격 : ' + products[i].price;
          }
        }

        // 원래대로 돌리기
        filter.addEventListener("click", function() {
          reset();

          products.forEach(el => {
            template(el);
          })
        })

        // 6만원 이하 상품 정렬
        filter6.addEventListener("click", function () {
          reset();
         
          let newProduct = products.filter(function (a) {
            return a.price <= 60000
          });
          newProduct.forEach(el => {
            template(el);
          });
        });

        // 이름 역순 정렬
        sortNameR.addEventListener("click", function () {
          products.sort(function (a, b) {
            if (a.title < b.title == true) {
              return 1
            } else {
              return -1
            }
          });
          data();
        });

        // 이름 순 정렬
        sortName.addEventListener("click", function () {
          products.sort(function (a, b) {
            if (a.title < b.title == true) {
              return -1
            } else {
              return 1
            }
          });

          data();
        });

        // 가격 높은순 정렬
        sortPriceR.addEventListener("click", function () {
          products.sort(function (a, b) {
            return b.price - a.price
          });
          data();
        });

        // 가격순 정렬
        sortPrice.addEventListener("click", function () {
          products.sort(function (a, b) {
            return a.price - b.price
          });
          data();
        });

        data();

        // reset
        function reset() {
          while (container.hasChildNodes()){
            container.removeChild(container.firstChild);
          }
        }
      </script>
    </body>

    </html>

    <hr />

    최대한 자바스크립트로만 구현을 하고싶어서 이렇게 숙제를 했는데요. 

    다른건 어느정도 다 원하는데로 구현이 되었는데, 

    6만원 이하를 누르고 가격 내림차순이나 이름 순 정렬를 누르면, 6만원 이하로 정렬된 상품들 사이에서 또 정렬이 이뤄지는게 아니라 

    원래 product 에 들어있던 3개의 상품들로 정렬이 됩니다ㅠㅠ..

     

    아마 product.sort 로 해서 그런거같은데요. product가 아니라 뭘 넣어야 할지 잘 모르겠습니다... 

    #21443

    codingapple
    키 마스터

    가격필터를 했을 경우 newProduct 이런 변수가 생길거같은데 

    newProduct가 있을 경우 그 변수로 sort하라고 코드를 짜는것이 어떨까요 

    아니면 가격필터를 먹였는지 안먹였는지 여부를 어디다 저장해놓는 것도 좋겠군요 

    #21447

    헤이미
    참가자

    다시 시도해보겠습니다 감사합니다

    #25214

    AlgoRoot
    참가자

    안녕하세요 혹시 이부분 해결 하셨을까요? ㅜ저도 이중필터하고싶은데 안되서요. 감사합니다.

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠