πŸ‘¨πŸ»β€πŸ’» λͺ¨λ˜ λ¦¬μ•‘νŠΈ Deep Dive

pjw__98Β·2024λ…„ 1μ›” 1일
1
post-thumbnail

πŸ“šμ±•ν„°

Array ν”„λ‘œν† νƒ€μž…μ˜ λ©”μ„œλ“œλ“€ 정리

πŸ“†ν•™μŠ΅ λ‚ μ§œ

2024 / 01 / 01 (μ›”)
μƒˆν•΄ 볡 많이 λ°›μœΌμ„Έμš” πŸ™‡πŸ»β€β™‚οΈ


πŸ‘¨πŸ»β€πŸ’» ν•™μŠ΅ λ‚΄μš©

🎯Array ν”„λ‘œν† νƒ€μž…μ˜ λ©”μ„œλ“œ

JSX λ‚΄λΆ€μ—μ„œ 배열을 μ‘°μž‘ν•΄ λ°”λ‘œ μ›ν•˜λŠ” JSXλ₯Ό λ°˜ν™˜ν•˜λŠ” νŠΉμ„±μƒ
map filter reduce 이 3개의 λ©”μ„œλ“œκ°€ 자주 쓰인닀.
그리고 이 λ©”μ„œλ“œλŠ” κΈ°μ‘΄ λ°°μ—΄μ˜ 값을 κ±΄λ“œλ¦¬μ§€ μ•Šκ³  μƒˆλ‘œμš΄ 값을 λ§Œλ“€μ–΄ λ‚΄κΈ° λ•Œλ¬Έμ— κΈ°μ‘΄ 값이 변경될 κ±±μ • 없이 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.
μΆ”κ°€μ μœΌλ‘œ forEachκΉŒμ§€ ν¬ν•¨ν•΄μ„œ μ†Œκ°œν•  λ©”μ„œλ“œλ“€μ€ ES5μ—μ„œλΆ€ν„° μ‚¬μš©ν•œ 문법이기 λ•Œλ¬Έμ— λ³„λ„μ˜ νŠΈλžœμŠ€νŒŒμΌμ΄λ‚˜ 폴리필 없어도 λΆ€λ‹΄ 없이 μ‚¬μš©ν•  수 μžˆλ‹€.

πŸ“Œ Array.prototype.map

Array.prototype.map은 인수둜 전달받은 λ°°μ—΄κ³Ό λ˜‘κ°™μ€ 길이의 μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλ‹€. λ°°μ—΄μ˜ 각 μ•„μ΄ν…œμ„ μˆœνšŒν•˜λ©΄μ„œ 각 μ•„μ΄ν…œμ„ 콜백으둜 μ—°μ‚°ν•œ 결과둜 κ΅¬μ„±λœ μƒˆλ‘œμš΄ 배열을 λ§Œλ“€ 수 μžˆλ‹€.

<script>
const arr = [1,2,3,4,5]
const doubleArr = arr.map((item) => item * 2)
// [2,4,6,8,10]
</script>

λ¦¬μ•‘νŠΈμ—μ„œλŠ” 주둜 νŠΉμ • 배열을 기반으둜 μ–΄λ– ν•œ λ¦¬μ•‘νŠΈ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜κ³ μž ν•  λ•Œ 많이 μ‚¬μš©ν•œλ‹€.

<script>
const arr = [1,2,3,4,5]
const Elements = arr.map((item) => {
	return <Fragment key={item}>{item}</Fragment>
})
</script>

πŸ“Œ Array.prototype.filter

Array.prototype.filter λ©”μ„œλ“œλŠ” 콜백 ν•¨μˆ˜λ₯Ό 인수둜 λ°›λŠ”λ°,이 콜백 ν•¨μˆ˜μ—μ„œ
truthy 쑰건을 λ§Œμ‘±ν•˜λŠ” κ²½μš°μ—λ§Œ ν•΄λ‹Ή μ›μ†Œλ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλ‹€.
말 κ·ΈλŒ€λ‘œ ν•„ν„°λ§ν•˜λŠ” μ—­ν• μ˜ λ©”μ„œλ“œμ΄λ©°,filter의 결과에 따라 원본 λ°°μ—΄μ˜ 길이 μ΄ν•˜μ˜ μƒˆλ‘œμš΄ 배열이 λ°˜ν™˜λœλ‹€. 즉, μ•žμ„  mapκ³Ό λ‹€λ₯΄κ²Œ 같은 크기의 배열이 λ‚˜μ˜€μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€. 주둜 κΈ°μ‘΄ 배열에 λŒ€ν•΄ μ–΄λ– ν•œ 쑰건을 λ§Œμ‘±ν•˜λŠ” μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•  λ•Œ 쓰인닀.

<script>
const arr = [1,2,3,4,5]
const evenArr = arr.filter((item) => item % 2 === 0)
// [2 , 4]
</script>

πŸ“Œ Array.prototype.reduce

Array.prototype.reduceλŠ” map , filter λ©”μ„œλ“œμ™€ λ‹€λ₯΄κ²Œ 쑰금 λ³΅μž‘ν•œ λ©”μ„œλ“œλ‹€.
처음 JSλ₯Ό μ ‘ν•œ 초보 κ°œλ°œμžλ“€μ΄ ν”νžˆ ν—·κ°ˆλ¦¬λŠ” λ©”μ„œλ“œλΌκ³ λ„ ν•œλ‹€.
이 λ©”μ„œλ“œλŠ” 콜백 ν•¨μˆ˜μ™€ ν•¨κ»˜ μ΄ˆκΉƒκ°’μ„ μΆ”κ°€λ‘œ 인수λ₯Ό λ°›λŠ”λ°, 이 μ΄ˆκΉƒκ°’μ— 따라 λ°°μ—΄μ΄λ‚˜ 객체,λ˜λŠ” κ·Έ μ™Έμ˜ λ‹€λ₯Έ 무언가λ₯Ό λ°˜ν™˜ν•  수 μžˆλŠ” λ©”μ„œλ“œλ‹€.

<script>
const arr = [1,2,3,4,5]
const sum = arr.reduce((result , item) => {
	return result + item
},0//μ΄ˆκΉƒκ°’)
// 15
</script>

λ¨Όμ € 0은 reduce의 κ²°κ³Όλ₯Ό λˆ„μ ν•  μ΄ˆκΉƒκ°’μ΄λ‹€. 그리고 reducer 콜백 ν•¨μˆ˜μ˜ 첫 번째 μΈμˆ˜λŠ” μ•žμ„œ μ„ μ–Έν•œ μ΄ˆκΉƒκ°’μ˜ ν˜„μž¬κ°’μ„ μ˜λ―Έν•˜κ³ ,두 번째 μΈμˆ˜λŠ” ν˜„μž¬ λ°°μ—΄μ˜ μ•„μ΄ν…œμ„ μ˜λ―Έν•œλ‹€.즉, 이 콜백의 λ°˜ν™˜κ°’μ„ κ³„μ†ν•΄μ„œ μ΄ˆκΉƒκ°’μ— λˆ„μ ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ 값을 λ§Œλ“ λ‹€κ³  λ³Ό 수 μžˆλ‹€.

reduceλŠ” λ‹¨μˆœνžˆ 합계λ₯Ό κ΅¬ν•˜λŠ” κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ 배열을 μ›ν•˜λŠ” ν•˜λ‚˜μ˜ 객체둜 λ³€ν™˜ν•˜λŠ” λ“± λ‹€μ–‘ν•œ μ˜ˆμ œμ—μ„œ μ‚¬μš©λœλ‹€. 그리고 filter와 map의 μž‘λ™μ„ reduce ν•˜λ‚˜λ‘œ κ΅¬ν˜„ν•  수 μžˆλŠ”λ°,reduceλŠ” μ•žμ„  두 λ©”μ„œλ“œμ— λΉ„ν•΄ μ‚¬μš©λ²•μ΄ λ³΅μž‘ν•΄ μ½”λ“œκ°€ 직관적이지 μ•Šλ‹€.λ”°λΌμ„œ 짧은 μ½”λ“œλΌλ©΄ filter와 map을 각각 ν™œμš©ν•΄ κ΅¬ν˜„ν•˜λŠ”κ²ƒλ„ λ•Œμ— λ”°λΌμ„œ λ‚˜μ˜μ§€ μ•Šλ‹€κ³ ν•œλ‹€.

πŸ€” Array.prototype.forEach

Array.prototype.forEach λŠ” 콜백 ν•¨μˆ˜λ₯Ό λ°›μ•„ 배열을 μˆœνšŒν•˜λ©΄μ„œ λ‹¨μˆœνžˆ κ·Έ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κΈ°λ§Œ ν•˜λŠ” λ©”μ„œλ“œλ‹€.

<script>
const arr = [1,2,3,4,5]

arr.forEach((item) => console.log(item))
// 1,2,3,4,5
</script>

λ¦¬μ•‘νŠΈ μ½”λ“œ λ‚΄λΆ€μ—μ„œ map,filter,reduceκ°€ 널리 μ‚¬μš©λ˜λ©΄μ„œ forEach도 자주 μ‚¬μš©λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ forEachλŠ” μ‚¬μš©ν•  λ•Œ μ£Όμ˜κ°€ ν•„μš”ν•œ λ©”μ„œλ“œλΌκ³  ν•œλ‹€.
λ¨Όμ € forEachλŠ” μ•„λ¬΄λŸ° λ°˜ν™˜κ°’μ΄ μ—†λ‹€. λ‹¨μˆœνžˆ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  뿐,mapκ³Ό 같이 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” μž‘μ—…μ€ μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.
즉, 콜백 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 아무리 λ°˜ν™˜ν•΄λ„ λͺ¨λ‘ 의미 μ—†λŠ” 값이 λœλ‹€κ³ ν•œλ‹€.
forEach의 λ°˜ν™˜κ°’μ€ undefined둜 의미 μ—†λ‹€λŠ” 것을 μ•Œμ•„λ‘μ–΄μ•Ό ν•œλ‹€.

또 ν•œ κ°€μ§€ μ£Όμ˜ν•  점은 forEachλŠ” μ‹€ν–‰λ˜λŠ” μˆœκ°„ μ—λŸ¬λ₯Ό λ˜μ§€κ±°λ‚˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•˜μ§€ μ•ŠλŠ” 이상 이λ₯Ό 멈좜 수 μ—†λ‹€λŠ”κ²ƒμ΄λ‹€.break,return, 그무엇을 μ΄μš©ν•΄λ„ λ°°μ—΄ 순회λ₯Ό 멈좜 수 μ—†λ‹€κ³ ν•œλ‹€.

➑️ λ‹€μŒκΈ€μ—μ„œλŠ” μ‚Όν•­ 쑰건 μ—°μ‚°μžμ— λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.

profile
β˜„οΈ

0개의 λŒ“κΈ€