songdev
songdev
songdev
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • Web 개발 (6)
    • 리눅스 (5)
    • git (5)
    • Bigdata (8)
      • 하둡 Architecture 번역 (6)
      • Ambari (2)
    • 코테 (22)
      • 프로그래머스 (22)
    • 자격증 (7)
      • 정보처리기사 (5)
      • SQLD (2)
    • 스터디 (18)
      • 웹 프로그래밍 (3)
      • 개념정리 (4)
      • 예제 (6)
      • 바닐라 JS로 크롬 앱 만들기 (5)
    • 일상 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • copyOfRange()
  • 배열
  • 정보처리기사 필기
  • 향상된 버블정렬
  • level1
  • parseInt()
  • github
  • SQLD
  • 깃허브
  • javascript
  • 프로그래머스
  • 리눅스
  • github push
  • charAt()
  • 배열의 복사
  • 자바스크립트
  • 정보처리기사
  • sort()
  • Java
  • 정렬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
songdev

songdev

스터디/바닐라 JS로 크롬 앱 만들기

JavaScript의 forEach()와 filter()

2021. 1. 22. 11:04
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function loadToDos()
{
    const loadedToDos = localStorage.getItem(TODOS_LS);
    //console.log(loadedToDos);     이건 String
    if(loadedToDos !== null)    // 기존에 등록된 todo가 있으면
    {
        const parsedToDos = JSON.parse(loadedToDos);    // JSON 형태로 만들어서
        parsedToDos.forEach(function(toDo){             // 각 항목들마다
            paintToDo(toDo.text);                       // text값을 뿌려주기
        });
    }
}
 
function deleteToDo(event)
{
    const btn = event.target;
    const li = btn.parentNode;
    toDoList.removeChild(li);       // 기존에 있던 리스트에서 선택된 li 삭제
    const cleanToDos = toDos.filter(function(toDo){
        return toDo.id !== parseInt(li.id); // 모든 toDos가 'li'의 id와 같지 않을 때
    });
    // filter는 array의 모든 아이템을 통해 함수를 실행하고,
    // 그 중 true인 아이템들만 가지고 새로운 array를 만든다.
 
    // 이제 필터링된 todo들만 담긴 array를 기존 array에 교체해야 함
    toDos = cleanToDos;
    saveToDos();    // localStorage에 toDos배열을 저장하기
}
Colored by Color Scripter
cs

 

1) forEach()

문법 : Array.forEach(callback, thisArg)

 

loadToDos()함수에 있는 forEach()를 살펴보자.

forEach()는 주어진 배열 안에 있는 모든 요소들을 하나씩 꺼낼 수 있다. 

단, forEach()는 반환값이 존재하지 않는다.

 

따라서 parsedToDos안에 들어있는 모든 요소들을 체크해서 paintToDo()함수로 인자값 text를 넣어서 호출하는 역할을 하고 있다. 

// paintToDo()함수는 받은 값을 담아서 뿌려주는 역할을 하는 함수이다. 받은 text값으로 데이터를 뿌려준다.

 

2) filter()

문법 : Array.filter(callback, thisArg)

 

deleteToDo()함수 안에 있는 filter()를 살펴보자.

filter()는 배열 내 모든 요소들을 체크해서 callback함수의 조건에 true인 아이템들만 가지고 새로운 array를 만든다.

말그대로 필터에 잘 걸러진 아이템들로만 새로운 배열을 만들어주는 함수이다. 따라서 이때 만들어진 새로운 array가 반환값이 된다.

 

위 코드는 삭제된 항목을 제외한 나머지 항목들로만 다시 배열을 만들어서 새로 교체하는 코드이다.

이때 20번줄에 return toDo.id !== parseInt(li.id); 이 코드의 의미가 뭔지 잘 이해가 안갔다.

왜 같지 않은걸 true로 둘까.. 그러면 삭제하려는 항목 하나만 반환되는거 아닌가? 생각했는데 반대로 생각한거였다.

 

기존 toDos배열이 가지고 있던 1~6번 아이템이 있다고 가정해보자.

이때 내가 3번 항목을 삭제하겠다고 클릭하였을 때, 16~17번 줄에서 3번 항목에 대한 li값을 정의한다.

그리고 filter()함수를 사용하여, toDos배열안에 모든 아이템을 하나하나 체크하면서 이때 이 아이템이 내가 선택한 아이템과 같지 않으면 true로 설정한다. 즉, 같으면 false다. toDos배열의 3번과 내가 방금 선택한 3번이 같으면 false를 반환해서 이건 필터된 배열에 포함되지 않는다. -> 삭제된다.

 

이렇게 true로만 이루어진 아이템들로 배열 cleantoDos를 반환하며, 이를 다시 현재 리스트인 toDos에 대입한다.

 

 

 

반응형

'스터디 > 바닐라 JS로 크롬 앱 만들기' 카테고리의 다른 글

JavaScript의 localStorage.getItem()과 setItem()  (0) 2021.01.21
JavaScript DOM 이벤트 refefence  (0) 2021.01.20
JavaScript의 addEventListener() 란?  (0) 2021.01.19
let, const, var  (0) 2021.01.13
    '스터디/바닐라 JS로 크롬 앱 만들기' 카테고리의 다른 글
    • JavaScript의 localStorage.getItem()과 setItem()
    • JavaScript DOM 이벤트 refefence
    • JavaScript의 addEventListener() 란?
    • let, const, var
    songdev
    songdev

    티스토리툴바