본문으로 건너뛰기
웹 프로젝트 기초집LESSON 13

필터와 정렬: 프로젝트 종류별로 목록 좁히기

난이도초급
예상 시간45분
선수지식12강 프로젝트 상세 모달

13강. 필터와 정렬: 프로젝트 종류별로 목록 좁히기

1. 이번 강의에서 해결할 문제

프로젝트가 늘어나면 방문자가 Unity와 Unreal 결과물을 빠르게 찾기 어렵습니다. 원본 배열은 보존하면서 선택된 종류에 맞는 목록만 계산합니다.

2. 학습 목표

3. 핵심 개념

필터는 조건에 맞는 새 배열을 만들고 정렬은 순서를 정합니다. 원본을 직접 변경하지 않도록 복사본에서 정렬합니다. 현재 필터는 하나의 상태 변수로 두고 렌더 함수에 전달합니다.

4. 단계별 실습

HTML · 프로젝트 제목 아래

game-dev-portfolio/index.html
<div id="projectFilters" aria-label="프로젝트 필터">
<button type="button" data-filter="all" aria-pressed="true">전체</button>
<button type="button" data-filter="unity" aria-pressed="false">Unity</button>
<button type="button" data-filter="unreal" aria-pressed="false">Unreal</button>
</div>
<p id="projectStatus" aria-live="polite"></p>

JavaScript · 파일 경로: js/app.js

game-dev-portfolio/js/app.js
const projectFilters = document.querySelector('#projectFilters');
const projectStatus = document.querySelector('#projectStatus');
let activeFilter = 'all';

function updateProjectList() {
const visible = projects
.filter((project) => activeFilter === 'all' || project.type === activeFilter)
.slice()
.sort((a, b) => a.title.localeCompare(b.title, 'ko'));
renderProjects(visible);
projectStatus.textContent = visible.length ? `${visible.length}개 프로젝트 표시 중` : '조건에 맞는 프로젝트가 없습니다.';
}

projectFilters.addEventListener('click', (event) => {
const button = event.target.closest('button[data-filter]');
if (!button) return;
activeFilter = button.dataset.filter;
projectFilters.querySelectorAll('button').forEach((item) => {
item.setAttribute('aria-pressed', String(item === button));
});
updateProjectList();
});

updateProjectList();

slice()가 필터 결과의 복사본을 만들고 sort()가 그 복사본만 정렬합니다. 개발자 도구 확인: Console에서 activeFilter, 카드 수와 상태 문구를 비교하고 버튼 속성 중 하나만 true인지 봅니다.

5. 코드가 동작하는 이유

원본 projects는 그대로 있고 현재 상태에서 표시 배열을 매번 계산합니다. 한 갱신 함수가 카드와 결과 문구를 함께 바꾸므로 UI가 서로 어긋나지 않습니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

필터와 정렬: 프로젝트 종류별로 목록 좁히기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“필터와 정렬: 프로젝트 종류별로 목록 좁히기”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2“필터와 정렬: 프로젝트 종류별로 목록 좁히기”의 작업 기준으로 ‘필터할 때 원본 배열 삭제’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

13강. 필터와 정렬: 프로젝트 종류별로 목록 좁히기 미완료 상태