λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 27μž₯ λ°°μ—΄

728x90

β›³ 27.1 λ°°μ—΄μ΄λž€?

 

μ—¬λŸ¬ 값을 순차적으둜 λ‚˜μ—΄ν•œ 자료ꡬ쑰. 

μš”μ†Œ: 배열이 κ°–κ³  μžˆλŠ” κ°’

인덱슀: μš”μ†Œμ˜ μˆœμ„œ 0λΆ€ν„° μ‹œμž‘

length : λ°°μ—΄μ˜ 길이

 

JS 에 λ°°μ—΄μ΄ν•œ νƒ€μž…μ€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ. 

배열은 객체 νƒ€μž…μž„. 

객체와 λ°°μ—΄μ˜ 차이

 

 

 

 

β›³ 27.2 μžλ°”μŠ€ν¬λ¦½νŠΈ 배열은 배열이 μ•„λ‹ˆλ‹€

 

🏌️‍♂️ 일반적인 μžλ£Œκ΅¬μ‘°μ—μ„œμ˜ λ°°μ—΄κ³ΌλŠ” μ˜λ―Έκ°€ λ‹€λ₯Έ JS μ—μ„œμ˜ λ°°μ—΄

- λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μœ„ν•œ 각각의 λ©”λͺ¨λ¦¬ 곡간은 λ™μΌν•œ 크기λ₯Ό 갖지 μ•Šμ•„λ„ 됨

- ν¬μ†Œ λ°°μ—΄ : λ°°μ—΄μ˜ μš”μ†Œκ°€ μ—°μ†μœΌλ‘œ 이어져 μžˆμ§€ μ•ŠμŒ (<-> 밀집 λ°°μ—΄)

- λ°°μ—΄μ˜ λ™μž‘μ„ 흉내 λ‚Έ νŠΉμˆ˜ν•œ κ°μ²΄μž„. 

 

🏌️‍♂️ 일반 λ°°μ—΄ vs μžλ°”μŠ€ν¬λ¦½νŠΈ λ°°μ—΄ μž₯단점 정리

일반 λ°°μ—΄ JS λ°°μ—΄
- 인덱슀둜 μš”μ†Œμ— λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€.

- ν•˜μ§€λ§Œ μš”μ†Œλ₯Ό μ‚½μž…, μ‚­μ œν•˜λŠ” κ²½μš°μ—” νš¨μœ¨μ„± 떨어짐. 
- ν•΄μ‹œ ν…Œμ΄λΈ”λ‘œ κ΅¬ν˜„λœ 객체 => μΈλ±μŠ€μ— μš”μ†Œλ‘œ μ ‘κ·Όν•˜λŠ” 경우 일반적인 배열보닀 μ„±λŠ₯ λ©΄μ—μ„œ 느릴 수 밖에 μ—†λ‹€.

- μš”μ†Œλ₯Ό μ‚½μž…, μ‚­μ œν•˜λŠ” κ²½μš°λŠ” λΉ λ₯Έ μ„±λŠ₯

 

인덱슀둜 λ°°μ—΄ μš”μ†Œμ— μ ‘κ·Ό μ‹œ 느린 점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 

λŒ€λΆ€λΆ„μ˜ JS 엔진은 배열을 일반 객체와 ꡬ별 & μ΅œμ ν™” κ΅¬ν˜„

-> 일반 객체보닀 μ•½ 2λ°° 빠름. 

 

였

time , timeEnd λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μΈ‘μ •ν•  수 있ꡰ

 

 

 

 

β›³ 27.3 length ν”„λ‘œνΌν‹°μ™€ ν¬μ†Œ λ°°μ—΄

 

λ°°μ—΄μ˜ 길이λ₯Ό λ°”νƒ•μœΌλ‘œ κ²°μ •λ˜μ§€λ§Œ, 

μž„μ˜λ‘œ 숫자 값을 λͺ…μ‹œμ μœΌλ‘œ ν• λ‹Ήν•  μˆ˜λ„ μžˆλ‹€. 

μ‹€μ œ λ°°μ—΄ 길이보닀 μž‘μ€ 숫자 ν• λ‹Ή -> 길이 쀄어듦

μ‹€μ œ λ°°μ—΄ 길이보닀 큰 숫자 ν• λ‹Ή -> λ³€ν™” μ—†μŒ. 값이 쑴재 ν•˜μ§€ μ•ŠκΈ°μ— λ©”λͺ¨λ¦¬ 할당을 ν•˜μ§€ μ•ŠμŒ. 

 

ν¬μ†Œ λ°°μ—΄

- μš”μ†Œκ°€ μ—°μ†μ μœΌλ‘œ μœ„μΉ˜ν•˜μ§€ μ•Šκ³  일뢀가 λΉ„μ–΄μžˆλŠ” λ°°μ—΄. 

- JS μ—μ„œ λ¬Έλ²•μ μœΌλ‘œ ν—ˆμš©ν•¨. 

- 쀑간, μ•žλΆ€λΆ„μ΄ λΉ„μ–΄μžˆμ„ 수 있음.

- ν¬μ†Œ λ°°μ—΄μ˜ length λŠ” ν¬μ†Œ λ°°μ—΄μ˜ μ‹€μ œ μš”μ†Œ κ°œμˆ˜λ³΄λ‹€ μ–Έμ œλ‚˜ 크닀. 

const arr = [1, , 3];

 

 

 

β›³ 27.4 λ°°μ—΄ 생성

 

27.4.1 λ°°μ—΄ λ¦¬ν„°λŸ΄

const arr = [1, 2, 3];

 

27.4.2  Array μƒμ„±μž ν•¨μˆ˜

const arr = new Array(10);

빈자리 10개 생성 

μ±„μš°κΈ° μ „ κΉŒμ§€ ν¬μ†Œλ°°μ—΄

 

27.4.3 Array.of

μ „λ‹¬λœ 인수λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” λ°°μ—΄ 생성

Array.of(1, 2, 3); // [1, 2, 3]

 

27.4.3 Array.from

μœ μ‚¬ λ°°μ—΄ 객체 λ˜λŠ” μ΄ν„°λŸ¬λΈ” 객체λ₯Ό 인수둜 전달 λ°›μ•„ λ°°μ—΄λ‘œ λ°˜ν™˜

Array.from({length: 2, 0: 'a', 1: 'b'}); // ['a', 'b']

 

 

 

 

β›³ 27.5 λ°°μ—΄ μš”μ†Œμ˜ μ°Έμ‘°

 

arr[index]

 

 

 

 

β›³ 27.6 λ°°μ—΄ μš”μ†Œμ˜ 좔가와 κ°±μ‹ 

 

[] μ•ˆμ— μ •μˆ˜ μ΄μ™Έμ˜ 값을 μ‚¬μš©ν•˜λ©΄ -> μš”μ†Œ 생성이 μ•„λ‹ˆλΌ ν”„λ‘œνΌν‹°κ°€ 생성됨.

const arr = [];

arr[0]=1;
arr['1'] = 2;

//[1, 2]

arr['hello'] = 3;
arr.bar = 4;
arr[1.1] = 5;
arr[-1] = 6;

//[1, 2, hello:3, bar:4, '1.1': 5, '-1': 6]

 

 

 

 

β›³ 27.7 λ°°μ—΄ μš”μ†Œμ˜ μ‚­μ œ

 

delete μ—°μ‚°μž μ‚¬μš©

 

 

β›³ 27.8 λ°°μ—΄ λ©”μ„œλ“œ

 

원본 λ°°μ—΄ 직접 λ³€κ²½ mutator method

원본 λ°°μ—΄ λ³€κ²½ μ•ˆν•˜κ³  μƒˆλ‘œμš΄ λ°°μ—΄ 생성 accessor method

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Array

 

Array() μƒμ„±μž - JavaScript | MDN

Array() μƒμ„±μžλŠ” μƒˆλ‘œμš΄ Array 객체λ₯Ό 생성할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

developer.mozilla.org

 

λ©”μ„œλ“œ 리슀트 μ°Έμ‘°

 

 

27.8.7 Array.prototype.concat()

concat() λ©”μ„œλ“œλŠ” 인자둜 주어진 λ°°μ—΄μ΄λ‚˜ 값듀을 κΈ°μ‘΄ 배열에 ν•©μ³μ„œ μƒˆ 배열을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • 기쑴배열을 λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • μΆ”κ°€λœ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

push 와 unshift 와 λ‹€λ₯Έ 점

- μ–˜λ„€λŠ” 원본 λ°°μ—΄ λ³€κ²½, concat 은 원본 배열을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ λ°°μ—΄ λ°˜ν™˜. 

- push, unshift μ‚¬μš©μ‹œ 원본 배열을 λ”°λ‘œ μ €μž₯해둬야함. 

- λ°°μ—΄λ‘œ 인수λ₯Ό 전달 받을 경우, push 와 unshift λŠ” 배열을 κ·ΈλŒ€λ‘œ μš”μ†Œλ‘œ 좔가함. 

- concat 은 전달받은 배열을 해체, μƒˆλ‘œμš΄ λ°°μ—΄μ˜ μš”μ†Œλ‘œ 좔가함.

 

 

 

27.8.8 Array.prototype.splice()

- 쀑간 κ°’ μ œκ±°ν•˜κ³  μΆ”κ°€ν•  λ•Œ μœ μš©ν•¨. 

 

27.8.9 Array.prototype.slice()

볡사. μ „λ‹¬λœ λ²”μœ„μ˜ μš”μ†Œλ₯Ό 볡사  -> λ°°μ—΄λ‘œ λ°˜ν™˜. 원본 배열은 λ³€κ²½λ˜μ§€ μ•ŠμŒ. 

(얕은 λ³΅μ‚¬μž„)

 

 

27.8.14 Array.prototype.flat()

flat() λ©”μ„œλ“œλŠ” λͺ¨λ“  ν•˜μœ„ λ°°μ—΄ μš”μ†Œλ₯Ό μ§€μ •ν•œ κΉŠμ΄κΉŒμ§€ μž¬κ·€μ μœΌλ‘œ 이어뢙인 μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•©λ‹ˆλ‹€.

const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]

 

였..

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

 

Array.prototype.flat() - JavaScript | MDN

flat() λ©”μ„œλ“œλŠ” λͺ¨λ“  ν•˜μœ„ λ°°μ—΄ μš”μ†Œλ₯Ό μ§€μ •ν•œ κΉŠμ΄κΉŒμ§€ μž¬κ·€μ μœΌλ‘œ 이어뢙인 μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•©λ‹ˆλ‹€.

developer.mozilla.org

 

 

 

β›³ 27.9 λ°°μ—΄ κ³ μ°¨ ν•¨μˆ˜

 

κ³ μ°¨ ν•¨μˆ˜ : ν•¨μˆ˜λ₯Ό 인자둜 λ°›κ±°λ‚˜ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜. 

 

ν¬μ†Œ λ°°μ—΄μ˜ 경우 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μš”μ†ŒλŠ” 순회 λŒ€μƒμ—μ„œ μ œμ™Έλ¨. 

 

 

27.9.10 Array.prototype.flatMap()

flat + map => map λ©”μ„œλ“œλ₯Ό 톡해 μƒμ„±λœ μƒˆλ‘œμš΄ 배열을 평탄화. 

평탄화 깊이λ₯Ό 지정할 수 μ—†κ³  1λ‹¨κ³„λ§Œ κ°€λŠ₯. 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap

 

Array.prototype.flatMap() - JavaScript | MDN

flatMap() λ©”μ„œλ“œλŠ” λ¨Όμ € λ§€ν•‘ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ 각 μ—˜λ¦¬λ¨ΌνŠΈμ— λŒ€ν•΄ map μˆ˜ν–‰ ν›„, κ²°κ³Όλ₯Ό μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ ν‰νƒ„ν™”ν•©λ‹ˆλ‹€. μ΄λŠ” 깊이 1의 flat 이 λ’€λ”°λ₯΄λŠ” map κ³Ό λ™μΌν•˜μ§€λ§Œ, flatMap 은 μ•„μ£Ό μœ μš©ν•˜λ©° λ‘˜μ„

developer.mozilla.org

 

 

 

 

728x90
λ°˜μ‘ν˜•