Learn map,filter and reduce in Javascript - Lee-hyuna/33-js-concepts-kr GitHub Wiki

μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ map, filter, reduce 배우기

ν•¨μˆ˜ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 벀처λ₯Ό μœ„ν•œ μ™„λ²½ν•œ νˆ΄μ„ΈνŠΈ !

이 κΈ°μ‚¬λŠ” Javascript의 초보자 λ˜λŠ” ν•¨μˆ˜ν˜• Javascript둜 μž‘μ—…μ„ μ‹œμž‘ν•˜κ³ μ§€λ„, filter 및 reduce ν•¨μˆ˜μ— λŒ€ν•΄ λ“€μ–΄ λ³Έ μ μ΄μ—†λŠ” μ‚¬λžŒλ“€μ„ λŒ€μƒμœΌλ‘œν•©λ‹ˆλ‹€. 이미 이것듀을 가지고 λ§Žμ€ μ—°μŠ΅μ„ν•œλ‹€λ©΄, 끝μͺ½μ— μžˆλŠ” ν₯미둜운 κΈ€λ‘œ 이동해도 λ©λ‹ˆλ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λž€ λ¬΄μ—‡μΈκ°€μš”?

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ ν•¨μˆ˜μ˜ 좜λ ₯ 값이 ν•¨μˆ˜μ— 전달 된 μΈμˆ˜μ—λ§Œ μ˜μ‘΄ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μž…λ‹ˆλ‹€. λ”°λΌμ„œ ν•¨μˆ˜λ₯Ό νŠΉμ • μ‹œκ°„λ§ŒνΌ ν˜ΈμΆœν•˜λ©΄ 호좜 μ‹œκ°„μ— 관계없이 항상 λ™μΌν•œ κ²°κ³Όκ°€ μƒμ„±λ©λ‹ˆλ‹€. 이것은 λ§Žμ€ ν•¨μˆ˜κ°€ 둜컬 λ˜λŠ” κΈ€λ‘œλ²Œ μƒνƒœμ—μ„œ μž‘λ™ν•˜λŠ” μ—¬λŸ¬ 가지 곡톡적이고 ν˜„λŒ€μ μΈ μ½”λ“œμ™€ λŒ€μ‘°λ˜λŠ”λ°, μ΄λŠ” μ„œλ‘œ λ‹€λ₯Έ μ‹€ν–‰μ—μ„œ λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ°˜ν™˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή μƒνƒœμ˜ 변경은 λΆ€μž‘μš©μ΄λ©° 이λ₯Ό μ œκ±°ν•˜λ©΄ μ½”λ“œμ˜ λ™μž‘μ„ 더 μ‰½κ²Œ μ΄ν•΄ν•˜κ³  μ˜ˆμΈ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ™œ map, filter, reduceμΈκ°€μš”?

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 기반 쀑 ν•˜λ‚˜λŠ” λͺ©λ‘ 및 λͺ©λ‘ 연산을 μ‚¬μš©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. Javascriptμ—μ„œ μš°λ¦¬λŠ” **map **, **filter ** 및 **reduce **λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 초기 리슀트(λ°°μ—΄)κ°€ 주어진 λͺ¨λ“  ν•¨μˆ˜λŠ” λ™μΌν•œ μ›λž˜μ˜ 리슀트(λ°°μ—΄)λ₯Ό κ·ΈλŒ€λ‘œ μœ μ§€ν•˜λ©΄μ„œ λ‹€λ₯Έ κ²ƒμœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

λ•Œλ•Œλ‘œ μš°λ¦¬λŠ” 각 객체의 속성을 μˆ˜μ • / μΆ”κ°€ν•˜λ €λŠ” 객체 배열을 가지고 있으며, λ‹€λ₯Έ κ²½μš°μ—λŠ” λͺ¨λ“  객체λ₯Ό μ†Œλ¬Έμžλ‘œ λ°”κΎΈλŠ” λ¬Έμžμ—΄ 배열을 κ°€μ§ˆ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ **map **이 ꡬ세주이며 무척 μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ λ¬΄μˆ˜ν•œ μƒν™©μ΄μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄λ–»κ²Œ 이것을 μ‚¬μš©ν•˜λ‚˜μš”?

map을 ν˜ΈμΆœν•˜λŠ” κ°€μž₯ 기본적인 λ°©λ²•μž…λ‹ˆλ‹€.

img

Map을 μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ λͺ¨λ“  μˆ«μžμ— 2λ₯Ό κ³±ν•©λ‹ˆλ‹€.

λ³΄μ‹œλ‹€μ‹œν”Ό, **map **은 μ½œλ°±μ„ μΈμˆ˜λ‘œλ°›μŠ΅λ‹ˆλ‹€. κ·Έ μ½œλ°±μ—λŠ” 반볡의 **ν˜„μž¬ κ°’ **, 반볡의 **인덱슀 **, 맡이 호좜 된 μ›λž˜ λ°°μ—΄ **이 μ£Όμ–΄μ§‘λ‹ˆλ‹€. 콜백 λ‚΄μ—μ„œ "this"**둜 μ‚¬μš©ν•  값인 map (콜백 이후)에 λŒ€ν•œ 선택적 두 번째 μΈμˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ

λ‘κ°œμ˜ λ°°μ—΄ 였브젝트 :

img

songs λ°°μ—΄

img

map을 μ‚¬μš©ν•œ λͺ¨λ“  λ…Έλž˜ 이름 κ°€μ Έ 였기

img

λͺ¨λ“  λ…Έλž˜ 이름을 μ†Œλ¬Έμžλ‘œ λ§€ν•‘ν•˜λŠ” util ν•¨μˆ˜ μ‚¬μš©

img

Map을 μ‚¬μš©ν•˜μ—¬ 속성을 μ œκ±°ν•˜κ³  λ°°μ—΄μ˜ 객체에 μƒˆ 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.

λΈŒλΌμš°μ € ν˜Έν™˜μ„±

img

Javascript map λΈŒλΌμš°μ € ν˜Έν™˜μ„±

ν•„μžλŠ” ν”„λ‘œκ·Έλž˜λ¨Έλ‘œμ„œμ˜ 전체 κ²½λ‘œμ—μ„œ κ°€μž₯ 일반적인 μ—°μŠ΅ 쀑 ν•˜λ‚˜ 인 κΈ°μ‘΄ λ°°μ—΄μ—μ„œ 일뢀 ν•­λͺ©μ„ ν•„ν„°λ§ν•΄μ•Όν•œλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€. 이것은 λ‹Ήμ‹  μžμ‹ μ„ν•˜κΈ°μ— κ½€ μ„±κ°€ μ‹œλ˜ κ²ƒμ΄μ—ˆμ§€λ§Œ μ΄μ œλŠ” 땀을 흘릴 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. **ν•„ν„° **κ°€ λ„μ›€μ΄λ©λ‹ˆλ‹€!

μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

**map **κ³Ό 맀우 μœ μ‚¬ν•©λ‹ˆλ‹€. **map **을 μ•Œκ³  μžˆλ‹€λ©΄ **filter **λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€!

img

**ν•„ν„° **λŠ” **map **κ³Ό 같은 인수λ₯Όλ°›μœΌλ©° 맀우 μœ μ‚¬ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€. μœ μΌν•œ 차이점은 콜백이 **true ** λ˜λŠ” **false **λ₯Ό λ°˜ν™˜ν•΄μ•Όν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. **true **λ₯Ό λ°˜ν™˜ν•˜λ©΄ 배열은 ν•΄λ‹Ή μš”μ†Œλ₯Ό μœ μ§€ν•˜κ³  **false **λ₯Ό λ°˜ν™˜ν•˜λ©΄ μš”μ†Œκ°€ ν•„ν„°λ§λ©λ‹ˆλ‹€.

예제

이전과 같은 λ…Έλž˜ 배열을 κ°μ•ˆν•  λ•Œ

img

ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 짝수λ₯Ό ν•„ν„°λ§ν•˜κΈ°

img

ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ "at"κ°€μžˆλŠ” λͺ¨λ“  단어 필터링

img

ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ λ…Έλž˜ λ°°μ—΄μ—μ„œ λͺ¨λ“  λ§ˆμŠ€ν† λˆ λ…Έλž˜ κ°€μ Έ 였기

λΈŒλΌμš°μ € ν˜Έν™˜μ„±

img

Javascript filter λΈŒλΌμš°μ € ν˜Έν™˜μ„±

λ§ˆμ§€λ§‰μœΌλ‘œ, **reduce **λŠ” 배열을 μ·¨ν•˜μ—¬ ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ μ€„μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 숫자 배열을 μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  κ°’μ˜ 평균을 μ‰½κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

**map ** 및 **filter **와 λΉ„μŠ·ν•˜μ§€λ§Œ 콜백 μΈμˆ˜κ°€ λ‹€λ¦…λ‹ˆλ‹€. μ½œλ°±μ€ 이제 **accumulator ** (λͺ¨λ“  λ°˜ν™˜ 값을 λˆ„μ ν•˜λ©° κ·Έ 값은 이전에 λ°˜ν™˜ 된 λˆ„μ  κ°’μ˜ λˆ„μ  κ°’μž…λ‹ˆλ‹€), ν˜„μž¬ κ°’, ν˜„μž¬ 인덱슀 및 λ§ˆμ§€λ§‰μœΌλ‘œ 전체 λ°°μ—΄μ„λ°›μŠ΅λ‹ˆλ‹€.

img

Reduceλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ 합을 계산 ν•œ λ‹€μŒ 평균을 μ°ΎμŠ΅λ‹ˆλ‹€.

예제

이전과 같은 λ…Έλž˜ 배열을 κ°μ•ˆν•  λ•Œ

img

λ°°μ—΄ 합계 계산

img

reduceλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ—μ„œ 객체 λ§Œλ“€κΈ°

img

reduceλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄ λ°°μ—΄ 병합

λΈŒλΌμš°μ € ν˜Έν™˜μ„±

img

Javascript reduce λΈŒλΌμš°μ € ν˜Έν™˜μ„±

μœ„λŒ€ν•œ 힘 ✨

Triforce The

**지도 **, **ν•„ν„° ** 및 **μΆ•μ†Œ **λŠ” μ—°κ²° κ°€λŠ₯ν•˜λ©°, ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ λ¬΄μ œν•œμ˜ μ‹ λΉ„ν•œ νž˜μ„κ°€μ§‘λ‹ˆλ‹€! πŸ˜„ ✨

Spotify 및 LastFM의 λ…Έλž˜κ°€μžˆλŠ” λ°°μ—΄ λ°°μ—΄μ΄μžˆλŠ” μ΄λŸ¬ν•œ λ³΅μž‘ν•œ λ…Έλž˜ 배열을 μƒκ°ν•΄λ³΄μ‹­μ‹œμ˜€. 각 λ…Έλž˜μ˜ μž¬μƒ μ‹œκ°„μ€ 초 λ‹¨μœ„μž…λ‹ˆλ‹€.

img

μ΄μ œλŠ” μ‰Όν‘œλ‘œ ꡬ뢄 된 λ¬Έμžμ—΄μ„ 3 뢄보닀 κΈ΄ λͺ¨λ“  λ…Έλž˜μ™€ ν•¨κ»˜ κ°€μ Έμ™€μ•Όν•©λ‹ˆλ‹€.] (https://gist.github.com/JoaoCnh/0dde17e75ff4549114dfc6d492f99d88?source=post_page-- ------------------)

img

μ™œ map, filter, reduce을 μ‚¬μš©ν•˜λ‚˜μš”?

  • 인덱슀λ₯Ό 톡해 μ•‘μ„ΈμŠ€ν•˜λŠ” λŒ€μ‹  ν˜„μž¬ κ°’μœΌλ‘œ 직접 μž‘μ—…ν•©λ‹ˆλ‹€ (예 : array [i]).
  • μ›λž˜ λ°°μ—΄μ˜ λŒμ—°λ³€μ΄λ₯Ό ν”Όν•˜μ‹­μ‹œμ˜€. λ”°λΌμ„œ λΆ€μž‘μš©μ„ μ΅œμ†Œν™”ν•˜μ‹­μ‹œμ˜€.
  • **for ** 루프λ₯Ό 관리 ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • 더 이상 빈 배열을 λ§Œλ“€κ³  κ·Έ μ•ˆμ— 값을 넣지 λ§ˆμ‹­μ‹œμ˜€.
  • **μ½œλ°±μ—μ„œ **λŒμ•„ μ˜€λŠ” ꡬ문을 κΈ°μ–΅ν•˜μ‹­μ‹œμ˜€
  • 당신은 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ κ°•λ ₯ν•œ 힘라고 λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
⚠️ **GitHub.com Fallback** ⚠️