7.6 ~ 7.8 TO DO LIST
#7.6 Deleting To Dos part One
์ ๋ฒ ์ฝ๋์์ ์ญ์ ๊ธฐ๋ฅ์ ์ ์คํ๋์ผ๋, ๋ฌธ์ ๋ ๊ฐ์ ์ด๋ฆ์ ํญ๋ชฉ์ด ์์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด '๋๋ฃจํ ๋ณด๊ธฐ'๊ฐ ๋๊ฐ๊ฐ ์์ ๋, ๋๋ฃจํ ๋ณด๊ธฐ ๋ ์ค ํ๋๋ฅผ ์ญ์ ํ์ ๋ ์ด๋ค ๊ฒ์ ์ญ์ ํ๋์ง ๋ชจ๋ฅธ๋ค. ๋๋ฌธ์ array์ ๊ฐ item์ id๋ฅผ ๋ถ์ฌํด ๊ณ ์ ์ฑ์ ๊ฐ๊ฒํ ๊ฒ์ธ๋ฐ, ์ด ๊ณ ์ ์ฑ์ Date.now() ํจ์๋ก ๋ถ์ฌํ ๊ฒ์ด๋ค.
Date.now()๋ ๋ฐ๋ฆฌ์ด(1000/1์ด)๋ฅผ ์ฃผ๋ ํจ์๋ก, ์ด๋ฅผ ๊ฐ item์๊ฒ ๊ณ ์ ํ ์์ด๋ ๊ฐ์ผ๋ก ๋ถ์ฌํ ๊ฒ์ด๋ค.
handleToDoSubmit
function handleToDoSubmit(event) {
event.preventDefault();
const newTodo = toDoInput.value;
toDoInput.value = "";
const newToDoObj = {
text:newTodo,
id:Date.now(),
}
toDos.push(newToDoObj);
paintToDo(newToDoObj);
saveToDos();
}
๊ทธ๋ฆฌ๊ณ paintToDo ํจ์์๋ ์ด์ text๊ฐ ์๋ object๊ฐ ์ฝ์ ๋๋ฏ๋ก newToDoObj ๋ผ๋ ์ค๋ธ์ ํธ ์์ text๋ง span ํ๊ทธ์์ ๋ฃ์ด์ค์ผ ํ๋ค.
function paintToDo(newTodo) {
const li = document.createElement("li");
// ๊ฐ li์ ์ฒ์์ Date.now()๋ก ๋ถ์ฌํ id ๊ฐ์ ์์ฑ์ผ๋ก ์ถ๊ฐํ๋ค.
li.id = newTodo.id;
const span = document.createElement("span");
// ์ด์ newToDoObj๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฌํ๋ฏ๋ก ๊ทธ ์ค text๋ฅผ ์ ๋ฌํ๋ค.
// ์ฌ๊ธฐ์์ newTodo๋ ๋จ์ง ํจ์์ ์ธ์์ด๋ฏ๋ก ํท๊ฐ๋ฆฌ์ง ๋ง๊ฒ.
span.innerText = newTodo.text;
const button = document.createElement("button");
button.innerText = "โ";
button.addEventListener("click", deleteToDo);
li.appendChild(span);
li.appendChild(button);
toDoList.appendChild(li);
}
#7.7 Deleting To Dos part Two
forEach์ฒ๋ผ array์ ๊ฐ ์ธ๋ฑ์ค๋ค์๊ฒ ํ๋์ ๋์์ ์คํ์ํค๋ filter ํจ์๋, array์์ item์ ์ง์ฐ๋ ๊ฒ์ด ์๋ ์ ์ธํ๋ ๊ฒ์ด๋ค.
๊ธฐ์กด์ array์์ ์ ์ธํ item์ ๋บ ๋๋จธ์ง items๊ฐ ์๋ ์ array๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ์ฆ ์ ํ์ต์ ์ผ๋ก ๋ณด๋ฉด ๋๋ค.
์๋์ ์์๋ boolean์ ์ด์ฉํ ํจ์ foodFilter๋ฅผ ๋ง๋ค์ด์, !== (not)์ ํ์ฉํด ์ญ์ ํ๊ณ ์ถ์ item ์ธ์ ๋๋จธ์ง items๋ฅผ return์ํจ๋ค.
const arr = ["pizza", "chicken", "udon", "frenchFries", "pasta"];
function foodFilter(food){
return food !== "frenchFries";
}
console.log(arr.filter(foodFilter));
#7.8 Deleting To Dos part Three
์์ filter ํจ์๋ฅผ ์ด์ฉํด deleteToDo ํจ์๋ฅผ ์ด๋ ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
// toDos ์ญ์
function deleteToDo(event) {
const li = event.target.parentElement;
li.remove();
toDos = toDos.filter(toDo => toDo.id !== parseInt(li.id));
saveToDos();
}
filter()๋ forEach()์ฒ๋ผ ๋ชจ๋ ์ธ๋ฑ์ค์ ํํด์ ํ ๋ฒ์ฉ ์คํ์ํค๊ณ ์ง๋๊ฐ๋ค๊ณ ํ๋ค.
๋๋ฌธ์ id๊ฐ ๋ด๊ฐ ํด๋ฆญํ ๋ฒํผ์ ์์ด๋๊ฐ ์๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ์ ๋ถ toDos ์์ ๋ฃ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ id์ ๊ฐ์ Date.now()๋ก ๋ฐ์์จ number ๊ฐ์ด๋ฏ๋ก ๊ฒฐ๊ตญ string ๊ฐ์ผ๋ก ๋ณํ๋๊ฒ ๋๋ savedToDos์ index์๋ ๋ค๋ฅผ ๊ฒ์ด๋ค. ๋๋ฌธ์ parseInt๋ก ํด๋ฆญํ id ๊ฐ์ int๋ก ๋ฐ๊ฟ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๊ทธ ์ํ์ toDos๋ฅผ localStorage์ ์ ์ฅํ๋ฉด ๋์ด๋ค!
todo.js
const toDoForm = document.getElementById("todo-form");
const toDoInput = toDoForm.querySelector("input");
const toDoList = document.getElementById("todo-list");
const TODOS_KEY = "todos";
let toDos = [];
// toDos ์ ์ฅ
function saveToDos() {
localStorage.setItem(TODOS_KEY, JSON.stringify(toDos));
}
// toDos ์ญ์
function deleteToDo(event) {
const li = event.target.parentElement;
li.remove();
toDos = toDos.filter(toDo => toDo.id !== parseInt(li.id));
saveToDos();
}
// toDos UI
function paintToDo(newTodo) {
const li = document.createElement("li");
li.id = newTodo.id;
const span = document.createElement("span");
span.innerText = newTodo.text;
const button = document.createElement("button");
button.innerText = "โ";
button.addEventListener("click", deleteToDo);
li.appendChild(span);
li.appendChild(button);
toDoList.appendChild(li);
}
// toDos handle
function handleToDoSubmit(event) {
event.preventDefault();
const newTodo = toDoInput.value;
toDoInput.value = "";
const newToDoObj = {
text:newTodo,
id:Date.now(),
}
toDos.push(newToDoObj);
paintToDo(newToDoObj);
saveToDos();
}
toDoForm.addEventListener("submit", handleToDoSubmit);
// localStorage์ ์ ์ฅ๋ ๊ฐ์ ์ป์ด์ savedToDos์ ์ ์ฅ
const savedToDos = localStorage.getItem(TODOS_KEY);
// savedToDos๊ฐ ๋น์ด์์ง ์๋ค๋ฉด
if (savedToDos !== null) {
const parsedToDos = JSON.parse(savedToDos);
toDos = parsedToDos;
parsedToDos.forEach(paintToDo);
}
'javascript > ๋ฐ๋๋ผ JS๋ก ํฌ๋กฌ ์ฑ ๋ง๋ค๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY 14 (0) | 2023.01.09 |
---|---|
DAY 12 (0) | 2023.01.09 |
DAY 11 (0) | 2023.01.05 |
DAY 10 (0) | 2023.01.04 |
DAY 8 (0) | 2023.01.03 |