쭈꾸미
코드짜는 쭈꾸미
쭈꾸미
전체 방문자
오늘
어제
  • 분류 전체보기 (122)
    • Journal (54)
      • Today I Learned (44)
      • 후기&회고 (4)
      • 개인 프로젝트 (4)
      • 독서일기 (2)
    • HTML, CSS (5)
    • Javascript (32)
    • Typescript (2)
    • Git, Github (4)
    • Algorithm (1)
    • React, Next.js (14)
    • API, Database (6)
      • API (0)
      • Database (1)
      • GraphQL (2)
      • Rest-API (1)
    • React-Native (1)
    • ETC (2)
    • OS (1)
      • 우분투 Ubuntu (1)

인기 글

티스토리

hELLO · Designed By 정상우.
쭈꾸미

코드짜는 쭈꾸미

[Javascript] 실무 반복문 map / filter
Javascript

[Javascript] 실무 반복문 map / filter

2022. 1. 18. 14:35

map()

배열의 각 요소에 대해 동일한 동작을 반복하고 그 결과값을 모은 새 배열을 리턴한다.

간단하게 반복문이라고 생각하면 된다. for를 사용해서 만들 수 있는 함수는 map으로 거의 다 구현이 가능하다.  실무에서 for보다 훨씬 많이 사용한다고 함. (for는 요즘 실무에서는 거의 사용되지 않는다고.)

 

문법

// 1. 일반적인 배열
const classmates = ["철수", "영희", "훈이"]

classmates.map((el) => (`${el}어린이`))
// `${el}어린이` 는 (el) + "어린이" 와 동일하다.
// el은 element의 약자

// 2. 배열 안의 객체
const classmates2 = [
  {name : "철수"},
  {name : "영희"},
  {name : "훈이"}
]

classmates2.map((el) => ({name: `${el.name} 어린이`}))
// 이 경우 el은 하나하나의 객체다. 객체 안에서 key가 name인 값을 추출하는 것.

상단의 javascript를 콘솔에 찍어보면 다음과 같은 결과가 나온다.

 

 

 

추가 문법

classmates.map (el => (el.name))
classmates.map ((el) => el.name)

map의 기본 형태가 화살표 문법이기에 상단과 같은 방식의 생략도 가능하다.

// 1. 기본 화살표함수 형태
const add = () => {
    console.log("안녕하세요")
}
add() //안녕하세요

// 2. 이 경우 add2는 100을 반환한다
const add2 = () => {
    return 100
}
const qqq = add2()
qqq //100

// 3. 중괄호 내부에 하나의 return만 있을 경우에는 이런 식의 생략이 가능하다.
const add3 = () => 100

// 4. 그리고 3번의 add3은 이것과 동일하다
const add3 = () => (100)

그런데 el이 객체일 경우, 앞의 괄호는 생략이 가능하지만, 뒤쪽에 있는 괄호는 생략이 불가능하다.

const classmates = [
    { name: "철수" },
    { name: "영희" },
    { name: "훈이" }
]

classmates.map((el) => ({ name: `${el.name} 어린이` }))
// 위와 같은 함수를
classmates.map((el) => { name: `${el.name} 어린이` })
// 이렇게 생략하는 것은 불가능하다.

이유가 무엇인지는 화살표 함수 모양으로 변경해보면 알 수 있다.

const add5 = () => { name: `${el.name} 어린이` }
// 이러한 화살표 함수 모양을 익숙한 모양으로 줄바꿈해보자.

const add5 = () => {
    name: `${el.name} 어린이`
}
// 그러면 객체를 감싸는 중괄호가 함수를 감싸는 중괄호의 역할을 하게 되었다는 것을 알 수 있다.
// 그 때문에 오류가 발생하는 것.

const add5 = () => {
    return { name: `${el.name} 어린이` }
}
const add5 = () => {return { name: `${el.name} 어린이`}
}

// 이렇게 return을 붙여주면 작동한다. 하지만 굳이 이렇게 할 필요가..?
// 그러니 간단하게 '객체를 감싸는 () 괄호는 생략이 불가능하다'고 기억해두자.

 

map을 HTML과 연결

map의 결과를 html과 연결하는 것도 가능하다.

// 1. 소스코드
const classmates = ["철수", "영희", "훈이"]
const aaa = classmates.map((el) => <div>{el}</div>)

// 2. 결과
const classmates = [<div>철수</div>, <div>영희</div>, <div>훈이</div>]

// 3. 이런 식의 응용도 가능하다.
export default function AAA() {
    const aaa = [<div>철수</div>, <div>영희</div>, <div>훈이</div>]
    return <div>{aaa}</div>
}

react에 이런 식으로 입력하면

 

이러한 형태로 html에 들어간다.

 

filter()

filter는 배열 내에서 주어진 조건을 통과하는 모든 요소를 모아 새로운 배열로 반환한다.

const ages = [10, 13, 11]
ages.filter((el) => (el >= 10))

//결과
[13, 11]

하나의 배열에 filter와 map을 동시에 쓸 수도 있다.

filter와 map을 응용하면 for문에서 사용하는 break, continue 등을 filter로 대체할 수 있다.

이렇게 되면 for문을 사용할 일이 거의 사라진다.

const classmates = [
    { name: "철수", age: 13 },
    { name: "영희", age: 10 },
    { name: "훈이", age: 11 }
]

classmates
    .filter((el) => (el.age >= 11))
    .map((el) => ({ name: wl.name, age: el.age, school: "다람쥐 초등학교"}))

 

key / index

  • key : map의 기능 중 하나로, 반복되는 각각의 엘리먼트에 부여되는 고유한 값이다.
  • index : map이 돌아갈때마다 각각의 엘리먼트에 index가 부여된다. 기타 index와 동일하게 0부터 시작하며, 몇번째 실행되는 map인지 알 수 있게끔 해준다. 단, index는 해당 회차를 구분하는 값일 뿐 key처럼 고유한 값은 아니다.

'Javascript' 카테고리의 다른 글

[Javascript] 삼항연산자 / 조건부 렌더링 / 옵셔널 체이닝  (0) 2022.01.19
[Javascript] 예외 처리 / try ... catch ... finally  (0) 2022.01.19
[Javascript] 호이스팅이란? | Hoisting  (0) 2022.01.17
[Javascript] async와 await | 동기와 비동기 방식  (0) 2022.01.17
[Javascript] 템플릿 리터럴 | Template literals  (0) 2022.01.14
    'Javascript' 카테고리의 다른 글
    • [Javascript] 삼항연산자 / 조건부 렌더링 / 옵셔널 체이닝
    • [Javascript] 예외 처리 / try ... catch ... finally
    • [Javascript] 호이스팅이란? | Hoisting
    • [Javascript] async와 await | 동기와 비동기 방식
    쭈꾸미
    쭈꾸미
    느리지만 확실하게 / 웹 프론트엔드 개발자 TIL : https://jooeun-k.github.io/TIL/

    티스토리툴바