상세 컨텐츠

본문 제목

js toDoList filter

웹/js

by nownow 2022. 7. 1. 21:45

본문

const todo = document.querySelector("#todo")
const todoInput = todo.querySelector("input");
let todos = [];

function save(){
    localStorage.setItem("todos",JSON.stringify(todos));
}
function pressButton(event){
    const list = (event.target.parentElement);
    list.remove();
}
function putlist(value){
    const list = document.createElement("li");
    const span = document.createElement("span");
    const button = document.createElement("button");
    button.innerText="X";
    span.innerText=value;
    list.appendChild(span);
    list.appendChild(button);
    const ul = document.querySelector("#list");
    ul.appendChild(list);
    
    button.addEventListener("click",pressButton);
    
}
function addList(event){
    event.preventDefault();
    const push = todoInput.value
    const input = todoInput.value;
    todos.push(push);
    todoInput.value="";
    putlist(input);
    save();
}
todo.addEventListener("submit",addList);

const store = localStorage.getItem("todos");
if(store)
{
    const item = JSON.parse(store);
    console.log(item);
    todos = item;
    console.log(todos);
    item.forEach(putlist);
}

이상태에서 남은 문제.

X를 눌렀을때 <ul> 내부 <li>는 삭제 되지만 localStorge에는 남아있어서 refresh시에 다시 생겨남.

pressButton 함수에서 삭제를 localStorage에도 관여해야함.

 

addList 함수에서

const push = {
        text:todoInput.value,
        id:Date.now()
    }

위와같이 입력값과 시간에 기반한 id를 포함한 object 형태로 바꾸어준다.

위 형태로 보내면 localStroage에는 정상적으로 입력되지만 list에서 오류가 발생.

putlist에서 innerText에 object의 항목이름 .text를 추가해줬다.

 

function pressButton(event){
    const list = (event.target.parentElement);
    console.log(list.id);
    list.remove();
}

그 후 삭제 버튼을 눌렀을 때 해당 버튼의 list의 id를 확인할 수 있다.

 

이제 localStorage에서 삭제하기 위해

filter() 함수를 사용.

배열.filter(함수) 하면 해당 배열을 인자로 함수를 실행하는데

해당 배열의 요소로 함수를 실행했을 때 true가 반환되는 요소만 남기고

false가 반환되는 요소는 제외하고 새로운 배열을 만들어서 해당 배열을 바꾸어줌.

false가 반환되는 요소를 삭제하는 것 같은 기능이 됨.

 

삭제 역할을 수행하는 함수에

todos=todos.filter((id)=>(id.id!==Number(list.id)));

위 부분을 넣어서 todos에 있는 id 중 버튼을 누른 부분의 id와 같으면 제외되도록 한다.

그후 save 함수를 실행해서 localStorage를 업데이트 해주면 계획대로 구현이 된다.

' > js' 카테고리의 다른 글

es6  (0) 2022.07.28
js api  (0) 2022.07.02
js toDolist localStorage arrow function  (0) 2022.06.30
js todoList  (0) 2022.06.29
js 랜덤 활용  (0) 2022.06.28

관련글 더보기