181011 TIL Lec3 할일관리 step2

» 1막, TIL (Today I Learned)

할일관리 step2

image

  • 어찌어찌해서 PR을 날림
const todo = {
    taskList: [],
    add(task) {
        task.status = 'todo';
        task.id = Date.now() + Math.random();
        this.taskList.push(task);
        let [todo, doing, done] = this.findStatus(this.taskList);
        console.log(`id : ${task.id}, "${task.name}" 항목이 새로 추가되었습니다.
현재 상태 - todo: ${todo}개, doing: ${doing}개, done: ${done}개 `);
    },

    update(idAndStatus) {
        idAndStatus.nextstatus = idAndStatus.nextstatus.trim().toLowerCase();
        for (const values of this.taskList) {
            if (values.id === idAndStatus.id && idAndStatus.nextstatus === 'doing') {
                values.doingTime = new Date().getTime();
                console.log(
                    `id : ${values.id}, "${values.name}" 항목이 (${values.status} => ${idAndStatus.nextstatus}) 상태로 업데이트되었습니다.`);
                values.status = idAndStatus.nextstatus;
                let [todo, doing, done] = this.findStatus(this.taskList);
                console.log(`현재 상태 - todo: ${todo}개, doing: ${doing}개, done: ${done}개`);
            }
            if (values.id === idAndStatus.id && idAndStatus.nextstatus === 'done') {
                let takenTime = (new Date().getTime() - values.doingTime) / 1000;
                if (takenTime <= 60) {
                    values.takenTime = takenTime + '';
                } else if (takenTime <= 3600) {
                    values.takenTime = (takenTime / 60).toFixed(0) + '';
                } else if (takenTime <= 86400) {
                    values.takenTime = (takenTime / 3600).toFixed(0) + '시간';
                } else if (takenTime > 86400) {
                    values.takenTime = (takenTime / 86400).toFixed(0) + '';
                }

                delete values.doingTime;
                console.log(
                    `id : ${values.id}, "${values.name}" 항목이 (${values.status} => ${idAndStatus.nextstatus}) 상태로 업데이트되었습니다.`);
                values.status = idAndStatus.nextstatus;
                let [todo, doing, done] = this.findStatus(this.taskList);
                console.log(`현재 상태 - todo: ${todo}개, doing: ${doing}개, done: ${done}개`);
            }
        }
    },

    remove(id) {
        for (const values of this.taskList) {
            if (values.id === id.id) {
                console.log(`id : ${id.id}, "${values.name}" 삭제 완료.`);
                this.taskList.splice(this.taskList.indexOf(values), 1);
            }
        }
    },

    findStatus(taskList) {
        let [todo, doing, done] = [0, 0, 0];
        for (const values of taskList) {
            if (values.status === 'todo') {
                todo++;
            }
            if (values.status === 'doing') {
                doing++;
            }
            if (values.status === 'done') {
                done++;
            }
        }
        return [todo, doing, done];
    },

    findTags(taskList) {
        let tagList = {};
        for (const values of taskList) {
            if (!tagList[values.tag]) {
                tagList[values.tag] = 1;
            } else if (tagList[values.tag])
                tagList[values.tag] += 1;
        }
        return tagList;
    },

    showTag(tag) {
        const result = this.taskList.filter(value => value.tag === tag);
        const [todo, doing, done] = this.findStatus(result);
        console.log(`tag가 "${tag}"인 할 일: `);
        if (todo !== 0) {
            console.log(`[todo, 총 ${todo}개]`);
            const todoTasks = result.filter(value => value.status === 'todo');
            todoTasks.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}`);
            });
        }
        if (doing !== 0) {
            console.log(`[doing, 총 ${doing}개]`);
            const doingTasks = result.filter(value => value.status === 'doing');
            doingTasks.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}`);
            });
        }
        if (done !== 0) {
            console.log(`[done, 총 ${done}개]`);
            const doneTasks = result.filter(value => value.status === 'done');
            doneTasks.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}`);
            });
        }
    },

    showTags() {
        const result = this.taskList.filter(value => value.tag !== 0);
        const tagList = this.findTags(result);
        for (const tag in tagList) {
            console.log(`\n[${tag}, 총 ${tagList[tag]}개]`);
            const sameTagTask = result.filter(result => result.tag === tag);
            sameTagTask.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}, [${task.status}]`);
            })
        }
    },

    show(status) {
        let showStatus = status.trim().toLowerCase();
        for (const values of this.taskList) {
            if (values.status === showStatus && showStatus !== 'done') {
                console.log(`- ${values.id}번, ${values.name}, [${values.tag}]`);
            }
            if (values.status === showStatus && showStatus === 'done') {
                console.log(`- ${values.id}번, ${values.name}, [${values.tag}], ${values.takenTime}`);
            }
        }
    },

    showAll() {
        const [todo, doing, done] = this.findStatus(this.taskList);
        console.log(`총 ${todo+doing+done}개의 리스트를 가져왔습니다. 2초 뒤에 todo 내역을 출력합니다...`);
        let todoTasks = [];
        let doingTasks = [];
        let doneTasks = [];
        for (const values of this.taskList) {
            if (values.status === 'todo') {
                todoTasks.push(values);
            } else if (values.status === 'doing') {
                doingTasks.push(values);
            } else if (values.status === 'done') {
                doneTasks.push(values);
            }
        }
        setTimeout(function () {
            console.log(`[todo, 총 ${todo}개]`)
            todoTasks.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}, [${task.tag}]`);
            })
            console.log(`\n 지금부터 3초 뒤에 doing 내역을 출력합니다...`);
        }, 2000);
        setTimeout(function () {
            console.log(`[doing, 총 ${doing}개]`)
            doingTasks.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}, [${task.tag}]`);
            })
            console.log(`\n 지금부터 2초 뒤에 done 내역을 출력합니다...`);
        }, 5000);
        setTimeout(function () {
            console.log(`[done, 총 ${done}개]`)
            doneTasks.forEach(function (task) {
                console.log(`- ${task.id}번, ${task.name}, [${task.tag}], ${task.takenTime}]
                `);
            })
        }, 7000);
    }
  • 주요 피드백 1) 함수단위 최소한으로 2) 변수명에서 어떤 일을 하는지 보이도록


알고리즘 스터디

  • 문제 풀이 공유
    • 이 과정에서 알게 된 것
      1) set: 중복 자료를 제거해주는 새로운 자료구조인 set을 달리 코드에서 배움
      //set 안쓰고
          let nums = [3, 3, 3, 2, 2, 2];
          for (let i = 0; i < nums.length; i++) {
          if(!unique.includes(nums[i])){
              unique.push(nums[i]);}
          }
      //set 쓰고
          const pockSet = new Set(nums)
    

    set 설명

    2) 스택 & 큐: 스택은 위로 쌓이고(LIFO), 큐는 옆으로 한 줄로 쌓임(FIFO)

    3) 비트연산자: image

    4) {length} = arr1 이렇게하면 arr1의 length 나옴..