# * Learning JavaScript - λ°°μ—΄ 3편

Written by πŸ“ Tesilio

이 ν¬μŠ€νŒ…μ€ Learning JavaScript의 8μž₯(λ°°μ—΄κ³Ό λ°°μ—΄ 처리)을 μ°Έκ³ ν•˜μ—¬ μž‘μ„± λ˜μ—ˆλ‹€.


# μ‚­μ œλ˜κ±°λ‚˜ μ •μ˜λ˜μ§€ μ•Šμ€ μš”μ†Œλ“€

Array λ©”μ„œλ“œλŠ” μ‚­μ œλ˜κ±°λ‚˜ μ •μ˜λ˜μ§€ μ•Šμ€ μš”μ†Œλ“€μ„ λ‹€λ£° λ•Œ μ’€ λ‹Ήν˜ΉμŠ€λŸ½κ²Œ λ™μž‘ν•˜κ³€ ν•œλ‹€. mapκ³Ό filter, reduceλŠ” μ‚­μ œλ˜κ±°λ‚˜ μ •μ˜λ˜μ§€ μ•Šμ€ μš”μ†Œλ“€μ—μ„œ 콜백 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ”λ‹€.
예λ₯Ό λ“€μ–΄ ES5μ—μ„œ 배열을 μ΄ˆκΈ°ν™”ν•  λ•Œ λ‹€μŒκ³Ό 같은 방법을 μ‹œλ„ν•΄ 보고 μ‹€λ§ν–ˆλ˜ μ‚¬λžŒλ„ μžˆμ„ 것이닀.

const arr = Array(10).map(function(x) { return 5 });
1

arr의 μš”μ†ŒλŠ” μ „λΆ€ undefined이닀. 이와 λΉ„μŠ·ν•˜κ²Œ, λ°°μ—΄ μ€‘κ°„μ˜ μš”μ†Œλ₯Ό μ‚­μ œν•˜κ³  map을 ν˜ΈμΆœν•˜λ©΄ λ°°μ—΄ κ°€μš΄λ° ꡬ멍이 생긴닀.

const arr = [1, 2, 3, 4, 5];
delete arr[2];
arr.map(x => 0);  // [0, 0, undefined, 0, 0]
1
2
3

일반적으둜 배열을 λ‹€λ£° λ•ŒλŠ” λͺ¨λ“  μš”μ†Œκ°€ λͺ…μ‹œμ μœΌλ‘œ μ •μ˜λœ 배열을 닀루고, μ˜λ„μ μœΌλ‘œ λ°°μ—΄μ•ˆμ— 빈 뢀뢄을 λ§Œλ“ λ‹€ ν•˜λ”λΌλ„ 배열에 deleteλ₯Ό μ“°μ§€λŠ” μ•Šμ„ ν…Œλ‹ˆ ν˜„μ‹€μ μœΌλ‘œλŠ” 이런 λ™μž‘μ΄ 문제λ₯Ό μΌμœΌν‚¬ κ°€λŠ₯성은 거의 μ—†λ‹€.
ν•˜μ§€λ§Œ μ•Œμ•„λ‘¬μ„œ λ‚˜μ  것은 μ—†λ‹€.


# λ¬Έμžμ—΄ 병합

λ°°μ—΄μ˜ λ¬Έμžμ—΄ μš”μ†Œλ“€μ„ λͺ‡λͺ‡ κ΅¬λΆ„μžλ‘œ ν•©μΉ˜λ € ν•  λ•Œκ°€ λ§Žλ‹€. Array.prototype.join은 κ°œλ³€μˆ˜λ‘œ κ΅¬λΆ„μž ν•˜λ‚˜λ₯Ό λ°›κ³  μš”μ†Œλ“€μ„ ν•˜λ‚˜λ‘œ ν•©μΉœ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€.
이 λ§€κ°œλ³€μˆ˜κ°€ μƒλž΅λμ„ λ•Œμ˜ 기본값은 μ‰Όν‘œμ΄λ©°, λ¬Έμžμ—΄ μš”μ†Œλ₯Ό ν•©μΉ  λ•Œ μ •μ˜λ˜μ§€ μ•Šμ€ μš”μ†Œ, μ‚­μ œλœ μš”μ†Œ, null, undefinedλŠ” λͺ¨λ‘ 빈 λ¬Έμžμ—΄λ‘œ μ·¨κΈ‰ν•œλ‹€.

const arr = [1, null, 'hello', 'world', true, undefined];
delete arr[3];
arr.join();
// '1,,hello,,true'

arr.join('');
// '1hellotrue'

arr.join(' -- ');
// '1 -- -- hello -- -- true --'
1
2
3
4
5
6
7
8
9
10

λ¬Έμžμ—΄ 병합과 Array.prototype.join을 ν•¨κ»˜ μ“°λ©΄ HTML <ul>리슀트 같은 것도 λ§Œλ“€ 수 μžˆλ‹€. μ΄λ•Œ 빈 배열에 μ‚¬μš©ν•˜λ©΄ 빈 <li>μš”μ†Œ ν•˜λ‚˜λ§Œ λ‚˜μ˜¬ 것이닀.

const attributes = ['Nimble', 'Perceptive', 'Generous'];
const html = '<ul><li>' + attributes.join('</li><li>') + '</li></ul>';
// html: "<ul><li>Nimble</li><li>Perceptive</li><li>Generous</li></ul>"
1
2
3

# μš”μ•½

μžλ°”μŠ€ν¬λ¦½νŠΈ Array ν΄λž˜μŠ€μ—λŠ” κ°•λ ₯ν•˜κ³  μœ μ—°ν•œ λ©”μ„œλ“œκ°€ λ§Žμ§€λ§Œ, λ•Œλ‘œλŠ” μ–΄λ–€ λ©”μ„œλ“œκ°€ μ΅œμ„ μΌμ§€ νŒλ‹¨ν•˜κΈ° μ–΄λ €μšΈ λ•Œλ„ μžˆλ‹€. λ‹€μŒ ν‘œλ“€μ€ Array λ©”μ„œλ“œλ₯Ό μš”μ•½ν•œ 것이닀.

콜백 ν•¨μˆ˜λ₯Ό λ°›λŠ” find, findIndex, some, every, map, filter, reduceμ—μ„œ 콜백 ν•¨μˆ˜κ°€ μ œκ³΅λ°›λŠ” λ§€κ°œλ³€μˆ˜λŠ” μ•„λž˜μ™€ κ°™λ‹€.

λ°°μ—΄ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜(μˆœμ„œλŒ€λ‘œ)

λ©”μ„œλ“œ μ„€λͺ…
reduceμ—λ§Œ 적용 λˆ„μ κ°’. μ΄ˆκΉƒκ°’ λ˜λŠ” λ§ˆμ§€λ§‰ ν˜ΈμΆœμ—μ„œ λ°˜ν™˜ν•œ κ°’
λͺ¨λ“  λ©”μ„œλ“œ μš”μ†Œ(ν˜„μž¬ μš”μ†Œμ˜ κ°’)
λͺ¨λ“  λ©”μ„œλ“œ ν˜„μž¬ μš”μ†Œμ˜ 인덱슀
λͺ¨λ“  λ©”μ„œλ“œ λ°°μ—΄ 자체

μ½œλ°±μ„ λ°›λŠ” λ©”μ„œλ“œλ“€μ€ λ˜ν•œ μ˜΅μ…˜μœΌλ‘œ μ½œλ°±μ„ ν˜ΈμΆœν•  λ•Œ this둜 μ‚¬μš©ν•  값을 받을 수 μžˆλ‹€. 이 λ§€κ°œλ³€μˆ˜λ₯Ό ν™œμš©ν•˜λ©΄ 콜백 ν•¨μˆ˜λ₯Ό λ©”μ„œλ“œμ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€.

λ°°μ—΄ μ½˜ν…μΈ  μ‘°μž‘

ν•˜κ³  싢은 일 μ‚¬μš©ν•  λ©”μ„œλ“œ μˆ˜μ • λ˜λŠ” 사본
μŠ€νƒ(ν›„μž… μ„ μΆœ)을 λ§Œλ“€ λ•Œ push(바뀐 길이 λ°˜ν™˜), pop λ°°μ—΄ μˆ˜μ •
큐(μ„ μž… μ„ μΆœ)λ₯Ό λ§Œλ“€ λ•Œ unshift(바뀐 길이 λ°˜ν™˜), shift λ°°μ—΄ μˆ˜μ •
μ—¬λŸ¬ μš”μ†Œλ₯Ό λ°°μ—΄ λ§ˆμ§€λ§‰μ— μΆ”κ°€ν•  λ•Œ concat 사본 λ°˜ν™˜
λ°°μ—΄ 일뢀가 ν•„μš”ν•  λ•Œ slice 사본 λ°˜ν™˜
μž„μ˜μ˜ μœ„μΉ˜μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•  λ•Œ splice λ°°μ—΄ μˆ˜μ •
λ°°μ—΄ μ•ˆμ—μ„œ μš”μ†Œλ₯Ό ꡐ체할 λ•Œ copyWithIn λ°°μ—΄ μˆ˜μ •
배열을 μ±„μšΈ λ•Œ fill λ°°μ—΄ μˆ˜μ •
배열을 λ°˜λŒ€λ‘œ μ •λ ¬ν•  λ•Œ reverse λ°°μ—΄ μˆ˜μ •
배열을 μ •λ ¬ν•  λ•Œ sort(μ •λ ¬ ν•¨μˆ˜ μ‚¬μš© κ°€λŠ₯) λ°°μ—΄ μˆ˜μ •

λ°°μ—΄ 검색

찾고자 ν•˜λŠ” 것 μ‚¬μš©ν•  λ©”μ„œλ“œ
μš”μ†Œμ˜ 인덱슀 indexOf(λ‹¨μˆœν•œ κ°’), findIndex(λ³΅μž‘ν•œ κ°’)
인덱슀λ₯Ό λ’€μ—μ„œλΆ€ν„° 찾을 λ•Œ lastIndexOf(λ‹¨μˆœν•œ κ°’)
μš”μ†Œ 자체 find
쑰건을 λ§Œμ‘±ν•˜λŠ” μš”μ†Œκ°€ λ“€μ–΄μžˆλŠ”μ§€ 확인할 λ•Œ some
λͺ¨λ“  μš”μ†Œκ°€ κ·Έ 쑰건을 λ§Œμ‘±ν•˜λŠ”μ§€ 확인할 λ•Œ every

λ°°μ—΄ λ³€ν˜•

ν•˜κ³  싢은 일 μ‚¬μš©ν•  λ©”μ„œλ“œ μˆ˜μ • λ˜λŠ” 사본
λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό λ³€ν˜•ν•  λ•Œ map 사본 λ°˜ν™˜
쑰건에 λ§žλŠ” μš”μ†Œλ§Œ 남길 λ•Œ filter 사본 λ°˜ν™˜
λ°°μ—΄ 전체λ₯Ό λ‹€λ₯Έ 데이터 νƒ€μž…μœΌλ‘œ λ³€ν˜•ν•  λ•Œ reduce 사본 λ°˜ν™˜
μš”μ†Œλ₯Ό λ¬Έμžμ—΄λ‘œ λ°”κΏ”μ„œ ν•˜λ‚˜λ‘œ ν•©μΉ  λ•Œ join 사본 λ°˜ν™˜
Last Updated: 8/26/2019, 1:38:34 PM