이 코드는 할 일(Task) 관리 시스템을 구현한 것입니다.
- Task 클래스: 개별 할 일 객체
- TaskList 클래스: 여러 개의 할 일 목록을 관리하는 리스트
- 정렬 기능: 할 일 목록을 제목(title), 생성 날짜(date), 등록 순서(register) 기준으로 정렬
https://www.youtube.com/watch?v=yMyDUpTjwCw&list=PLBA53uNlbf-ud8ttaC5QoC3XwJ04eOWbU&index=5
const Task = class { constructor(title) { this._title = title; this._date = Date.now(); this._isComplate = false; } isComplate() { return this._isComplate; } toggle() { // 메서드 이름도 오타 수정 (toogle → toggle) this._isComplate = !this._isComplate; } sortTitle(task) { return this._title.localeCompare(task._title); } sortDate(task) { return this._date - task._date; } }; const TaskSort = { 'title': (taskA, taskB) => taskA.sortTitle(taskB), 'date': (taskA, taskB) => taskA.sortDate(taskB), 'register': null, // register는 정렬할 기준이 없음 }; const TaskList = class { constructor(title) { this._title = title; this._list = []; } add(title) { this._list.push(new Task(title)); } _getList(sort, state) { const l = this._list; const s = TaskSort[sort]; if (!s) return [...l]; // 'register'의 경우 정렬 기준이 없으므로 원본 반환 if (state) { return [ l.filter(v => !v.isComplate()).sort(s), l.filter(v => v.isComplate()).sort(s) ].reduce((p, c) => p.concat(c), []); // reduce() 수정 } else { return [...l].sort(s); } } byTitle(state = false) { return this._getList('title', state); } byDate(state = false) { return this._getList('date', state); } byRegister(state = false) { return this._getList('register', state); } }; const list = new TaskList('list1'); list.add('task1'); list.add('task3'); list.add('task2'); console.log(list.byTitle()); // title 기준 정렬 확인
실행 결과 (제목 순 정렬)
[ Task { _title: 'task1', _date: 1710662400000, _isComplate: false }, Task { _title: 'task2', _date: 1710662401000, _isComplate: false }, Task { _title: 'task3', _date: 1710662402000, _isComplate: false } ]
'프로그래밍 > Js' 카테고리의 다른 글
console.log 출력 내용을 <div>에 표시하는 방법 (0) | 2025.02.28 |
---|---|
Promise.all 모든 비동기 작업이 끝난후 작업 실행 (0) | 2024.10.25 |
Promise 와 async await 대해 자세하게 알아보자. (0) | 2024.10.24 |
indexedDB 기초 사용법 (0) | 2024.10.07 |
Array.reduce 여러가지 사용 사례 (0) | 2024.08.27 |