181011 TIL Lec3 할일관리 step2
Oct 11, 2018
»
1막,
TIL (Today I Learned)
할일관리 step2
- 어찌어찌해서 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)
2) 스택 & 큐: 스택은 위로 쌓이고(LIFO), 큐는 옆으로 한 줄로 쌓임(FIFO)
3) 비트연산자:
4) {length} = arr1 이렇게하면 arr1의 length 나옴..
- 이 과정에서 알게 된 것