Skip to content

Commit c9367fe

Browse files
HTMLheadcrongro
authored andcommitted
Lecture3 - step1. 기본기능 구현 (#40)
* 스켈레톤 코드 작성 * 수많은 에러가 담긴 todo객체의 add함수 추가(id의 값을 제대로 가지지 못함, todo객체의 getStatusNum수정 필요 * 랜덤한 id값을 못가져오는 것을 수정. checkOverlap함수를 통해서 id의 값이 같지않도록 구현 * todo.add함수기능 완벽하게 구현 * todo.update함수 완성 * id를 입력받아 할일을 제거해주는 todo.remove함수 완성, 오류가많은 todo.printTask함수 완성 * todo.printTask함수 완성, tag를 확인하는 함수 제거(printTask를 통해 각 할일들의 태그가 무엇인지 확인이 가능하므로) * todo.printTagRelate 함수 완성, todo.add함수에서 버그를 발견함 * 새로운 객체 안 배열에 저장하도록 만들어 문제 해결 * remove함수를 호출했을때, saveData.task배열에서 지워지는것 뿐 아니라 saveData.idArrays배열에서도 id를 지워지게 수정 * 테스트코드를 주석처리함 들여쓰기를 다시 맞춤 * saveData객체를 없애고 그 내용을 todo객체 안으로 집어 넣음, todo.idArrays의 값은 todo.add를 호출할때마다 추가되도록 수정. * if(saveData.idArrays.indexOf(ranNum) !== -1)-> if(this.idArrays.includes(ranNum))으로 변경 * 기나긴 삼항연산자 statusNum[obj.status]++로 해결 * todo.update함수에서 바뀐 상태의 상태를 반영하지 않는 버그를 찾아내서 수정 * 함수마다 간단한 주석을 달아줌
1 parent 9422501 commit c9367fe

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

todo.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
const todo = {
2+
task: [],
3+
idArrays: [],
4+
getRanNum: function () {
5+
const ranNum = Math.floor(Math.random() * 5)
6+
if (this.idArrays.includes(ranNum)) {
7+
return this.getRanNum();
8+
}
9+
return ranNum;
10+
},//중복되지 않는 랜덤한 숫자를뽑아내는 함수
11+
12+
getStatusNum: function (accumulatedTask) {
13+
const statusNum = {
14+
todo: 0,
15+
doing: 0,
16+
done: 0
17+
}
18+
accumulatedTask.forEach(obj => {
19+
statusNum[obj.status]++
20+
})
21+
return statusNum
22+
},//상태를 초기화 시켜주는 함수
23+
24+
printStatusNum: function (statusNum) {
25+
console.log(`현재상태 todo : ${statusNum.todo}, doing: ${statusNum.doing}, done : ${statusNum.done}`)
26+
},//상태를 출력해주는 함수
27+
28+
add: function (objToAdd) {
29+
const newTodo = {
30+
id: this.getRanNum(),
31+
name: objToAdd.name,
32+
status: 'todo',
33+
tag: objToAdd.tag
34+
}
35+
this.idArrays.push(newTodo.id)
36+
this.task.push(newTodo)
37+
let statusNum = this.getStatusNum(this.task)
38+
console.log(`ID : ${newTodo.id}, ${newTodo.name} 항목이 추가되었습니다.`);
39+
this.printStatusNum(statusNum)
40+
},//해야할일과 id값을 추가해주는 함수
41+
42+
update: function (objToUpdate) {
43+
let beforeTaskStatus = []
44+
this.task = this.task.map(taskObj => {
45+
if (objToUpdate.id === taskObj.id) {
46+
beforeTaskStatus.push(taskObj.status)
47+
taskObj.status = objToUpdate.nextstatus.toLowerCase();
48+
return taskObj
49+
}
50+
return taskObj
51+
})
52+
const changedTask = this.task.filter(taskObj => {
53+
if (objToUpdate.id === taskObj.id) {
54+
return taskObj
55+
}
56+
})
57+
let statusNum = this.getStatusNum(this.task)
58+
console.log(`ID: ${changedTask[0].id}, ${changedTask[0].name} 항목이 ${beforeTaskStatus[0]} => ${changedTask[0].status} 상태로 업데이트 되었습니다.`)
59+
this.printStatusNum(statusNum)
60+
},//상태 업데이트 함수
61+
62+
remove: function (objToRemove) {
63+
let extractedTask = this.task.filter(taskObj => taskObj.id === objToRemove.id)
64+
let deletedArrays = this.idArrays.filter(value => objToRemove.id !== value)
65+
this.idArrays = deletedArrays
66+
let removedTask = this.task.filter(taskObj => taskObj.id !== objToRemove.id)
67+
this.task = removedTask
68+
console.log(`ID : ${extractedTask[0].id}, ${extractedTask[0].name} 삭제 완료`)
69+
},//할 일과 id값을 제거해주는 함수
70+
71+
printTask: function () {
72+
console.log(`입력된 할 일들`)
73+
this.task.forEach(obj => {
74+
console.log(`ID : ${obj.id}, 이름 : ${obj.name}, 상태 : ${obj.status}, 태그 : ${obj.tag}`)
75+
})
76+
},//입력된 데이터들을 출력해주는 함수
77+
78+
printSameTag: function (tag) {
79+
console.log(`현재 ${tag} 태그를 가진 할 일들은 다음과 같습니다.`);
80+
const tagSeparatedTask = this.task.filter(obj => {
81+
return obj.tag === tag
82+
})
83+
tagSeparatedTask.forEach(obj => {
84+
console.log(`ID : ${obj.id}, 이름 : ${obj.name}, 상태 : ${obj.status}`)
85+
})
86+
}//tag가 같은 할 일들 출력
87+
}//해야 할일 객체
88+
89+
// 테스트
90+
todo.add({ name: '자바스크립트', tag: 'programming' });
91+
todo.add({ name: 'C++', tag: 'programming' });
92+
todo.add({ name: '회식', tag: '회사' });
93+
todo.add({ name: '노래연습', tag: '자기개발' });
94+
todo.add({ name: '과장님업무', tag: '회사' })
95+

0 commit comments

Comments
 (0)