option 이라는 값에 다중 배열로 나타내었더니, 코드를 짜는데 매우큰 어려움을 겪었다…

이에 좀더 단순화 시켜보려고한다

아래는 기존 내가짯던 코드이다

window.addEventListener("load", function () {
  // 데이터
  const cockApiData = [
    {
      id: 1,
      option: [
        [{ 스타일: "blue", 텍스트: "공모전" }],
        { 스타일: "ad", 텍스트: "AD" },
      ],
      title: "[LX판토스] NEXT ESG 미래를 설계하는 아이디어 챌린지",
      day: "D-5",
    },
    {
      id: 2,
      option: [[{ 스타일: "blue", 텍스트: "공모전" }]],
      title: "[대홍기획] 제42회 DCA 대홍 크리에이티브 어워드(~7/17)",
      day: "D-23",
    },
    {
      id: 3,
      option: [[{ 스타일: "purple", 텍스트: "대외활동" }]],
      title: "[LG유플러스] 대학생 엠버서더 유쓰피릿 16기 모집 (~7/6자정)",
      day: "D-12",
    },
    {
      id: 4,
      option: [
        [
          { 스타일: "red", 텍스트: "인턴쉽" },
          { 스타일: "gray", 텍스트: "경기 성남시 분당구" },
        ],
      ],
      title: "[카카오뱅크] 콘텐츠 제작 어시스턴트 (체험형 인턴)",
      day: "D-7",
    },
  ];

  const cockPos = document.querySelector(".cock_list");

  let html = ``;

  for (let i = 0; i < cockApiData.length; i++) {
    html += `
      <li class="cock_item">
        <a href="#">
          <div class="cock_image">
            <img src="images/c${cockApiData[i].id}.png" alt="이미지${cockApiData[i].id}" />
          </div>
          <div class="cock_title">
            <div class="cock_title_top">
    `;

    if (i === cockApiData.length - 1) {
      html += `<span>`;
      for (let j = 0; j < cockApiData[i].option[0].length; j++) {
        html += `<span class="cock_top_${cockApiData[i].option[0][j].스타일}">${cockApiData[i].option[0][j].텍스트}</span>`;
      }
      html += `</span>`;
    } else {
      for (let j = 0; j < cockApiData[i].option.length; j++) {
        if (Array.isArray(cockApiData[i].option[j])) {
          for (let k = 0; k < cockApiData[i].option[j].length; k++) {
            html += `<span class="cock_top_${cockApiData[i].option[j][k].스타일}">${cockApiData[i].option[j][k].텍스트}</span>`;
          }
        } else {
          html += `<span class="cock_top_${cockApiData[i].option[j].스타일}">${cockApiData[i].option[j].텍스트}</span>`;
        }
      }
    }

    html += `
            </div>
            <div class="cock_title_middle">
              <span>
                <span class="cock_up">UP</span>
                ${cockApiData[i].title}
              </span>
            </div>
            <div class="cock_title_bottom">${cockApiData[i].day}</div>
          </div>
        </a>
      </li>
    `;
  }

  cockPos.innerHTML = html;

option에 내가 span 안의 span 을 줘서 왼쪽정렬을 시키려고 다중배열로 작업했더니,

다중 for문과 함께, if문까지 적용되어 코드가 매우 복잡해졌다..

그래서 option 부분을 배열하나에 객체를 여러개를 두어 좀더 단순하게 정리하였다.


window.addEventListener("load", function () {
  
  const cockApiData = [
    {
      id: 1,
      up: true,
      option: [
        { 스타일: "blue", 텍스트: "공모전" },
        { 스타일: "ad", 텍스트: "AD" },
      ],
      title: "[LX판토스] NEXT ESG 미래를 설계하는 아이디어 챌린지",
      day: "D-5",
    },
    {
      id: 2,
      up: false,
      option: [{ 스타일: "blue", 텍스트: "공모전" }],
      title: "[대홍기획] 제42회 DCA 대홍 크리에이티브 어워드(~7/17)",
      day: "D-23",
    },
    {
      id: 3,
      up: false,
      option: [{ 스타일: "purple", 텍스트: "대외활동" }],
      title: "[LG유플러스] 대학생 엠버서더 유쓰피릿 16기 모집 (~7/6자정)",
      day: "D-12",
    },
    {
      id: 4,
      up: false,
      option: [
        { 스타일: "red", 텍스트: "인턴쉽" },
        { 스타일: "gray", 텍스트: "경기 성남시 분당구" },
      ],
      title: "[카카오뱅크] 콘텐츠 제작 어시스턴트 (체험형 인턴)",
      day: "D-7",
    },
  ];

  const cockPos = document.querySelector(".cock_list");
  let html = ``;

  
  for (let i = 0; i < cockApiData.length; i++) {
    let leftBadge = "";
    let rightBadge = "";

    
    for (let j = 0; j < cockApiData[i].option.length; j++) {
      if (cockApiData[i].option[j].스타일 === "ad") {
        rightBadge += `<span class="cock_top_${cockApiData[i].option[j].스타일}">${cockApiData[i].option[j].텍스트}</span>`;
      } else {
        leftBadge += `<span class="cock_top_${cockApiData[i].option[j].스타일}">${cockApiData[i].option[j].텍스트}</span>`;
      }
    }

    html += `
      <li class="cock_item">
        <a href="#">
          <div class="cock_image">
            <img src="images/c${cockApiData[i].id}.png" alt="이미지${cockApiData[i].id}" />
          </div>
          <div class="cock_title">
            <div class="cock_title_top">
              <span>${leftBadge}</span>
              ${rightBadge}
            </div>
            <div class="cock_title_middle">
              ${cockApiData[i].up ? `<span class="cock_up">UP</span>` : ""}
              ${cockApiData[i].title}
            </div>
            <div class="cock_title_bottom">${cockApiData[i].day}</div>
          </div>
        </a>
      </li>
    `;
  }
  cockPos.innerHTML = html;

  const cockItems = document.querySelectorAll(".cock_item");

  cockItems.forEach(function (item) {
    item.addEventListener("mouseenter", function () {
      item.classList.add("cock_item_focus");
    });

    item.addEventListener("mouseleave", function () {
      item.classList.remove("cock_item_focus");
    });
  });
});

image.png

확실히 배열은 하나만 쓰는게 맘이 편한것같다.