study/TypeScript

TypeScript 103

salalsksjwnn 2023. 4. 20. 17:26
728x90

103

Map

  • TodoItem의 저장을 배열에서 Map 객체로 변경
  • 전체 할일 목록을 출력하기 위한 메소드를 새로 정의
  • 할일 목록 중에서 완료된 할일 목록을 삭제하는 메소드 추가

Map객체의 새로운 프로퍼티를 저장할 것

  • key값과 value값을 적용한다.

테스트

  • TodoCollections.ts
import TodoItem from "./TodoItem";

class TodoCollection{
    private nextId : number = 1;
    
    private itemMap : Map<number, TodoItem>;

    constructor(public userName:string, public todoItems:TodoItem[] = []){
        this.itemMap = new Map<number, TodoItem>();
        todoItems.forEach((item)=>this.itemMap.set(item.id, item));
    }
        
    // todoItem이거나 undefined를 리턴(값이 없을 수도 있으니) 
    getTodoById(id:number) : TodoItem | undefined { 
        return this.itemMap.get(id);
    }
    
    addTodo(task:string):number{
        while(this.getTodoById(this.nextId)){ 
            this.nextId++;
        }
        this.itemMap.set(this.nextId, new TodoItem(this.nextId,task));
        return this.nextId;
    }

    //includeComplete -> true : 모든 할일 목록을 반환
    //includeComplete -> false : 완료 목록은 제외한 할일 목록 반환
    getTodoItems(includeComplete:boolean):TodoItem[]{
        return[...this.itemMap.values()].filter(
            (item) => includeComplete || !item.complete
        ) 
    }

    removeComplete():void{
        this.itemMap.forEach((item)=>{
            if(item.complete){
                this.itemMap.delete(item.id)
            }
        })
    }

    markComplete(id:number, complete:boolean):void{
        const todoItem = this.getTodoById(id);
        if(todoItem){
            todoItem.complete = complete; 
        }
    }    
}

export default TodoCollection;
  • index.ts
728x90