관리 메뉴

Daehyunii's Dev-blog

27μž₯ λ°°μ—΄ λ³Έλ¬Έ

27.1 λ°°μ—΄μ΄λž€?

  배열은 μ—¬λŸ¬ 개의 값을 순차적으둜 λ‚˜μ—΄ν•œ μžλ£Œκ΅¬μ‘°λ‹€. 배열이 가지고 μžˆλŠ” 값을 μš”μ†ŒλΌκ³  λΆ€λ₯Έλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  값은 λ°°μ—΄μ˜ μš”μ†Œκ°€ 될 수 μžˆλ‹€. λ°°μ—΄μ˜ μš”μ†ŒλŠ” λ°°μ—΄μ—μ„œ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 0μ΄μƒμ˜ μ •μˆ˜μΈ 인덱슀λ₯Ό κ°–λŠ”λ‹€. μΈλ±μŠ€λŠ” λ°°μ—΄μ˜ μš”μ†Œμ— μ ‘κ·Όν•  λ•Œ μ‚¬μš©ν•œλ‹€. μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•œλ‹€. μš”μ†Œμ— μ ‘κ·Όν•  λ•ŒλŠ” λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•( [ ] )을 μ‚¬μš©ν•œλ‹€. λŒ€κ΄„ν˜Έ 내에 μ ‘κ·Όν•˜κ³  싢은 μš”μ†Œμ˜ 인덱슀λ₯Ό μ§€μ •ν•œλ‹€. 배열은 μš”μ†Œμ˜ 개수, 즉 λ°°μ—΄μ˜ 길이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” length ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ”λ‹€. 배열은 μΈλ±μŠ€μ™€ length ν”„λ‘œνΌν‹°λ₯Ό κ°–κΈ° λ•Œλ¬Έμ— for 문을 톡해 순차적으둜 μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 배열은 객체 νƒ€μž…μ˜ 값이닀.

const arr = ['apple','banana','orange'];

console.log(arr[0]); // 'apple'
console.log(arr[1]); // 'banana'
console.log(arr[2]); // 'orange'

console.log(arr.length); // 3

for(let i = 0 ; i < arr.length; i++){
    console.log(arr[i]); // 'apple' 'banana' 'orange'
}

console.log(typeof arr); // object

배열은 λ°°μ—΄ λ¦¬ν„°λŸ΄, Array μƒμ„±μž ν•¨μˆ˜, Array of λ©”μ„œλ“œ, Array from λ©”μ„œλ“œλ‘œ 생성할 수 μžˆλ‹€. λ°°μ—΄μ˜ μƒμ„±μž ν•¨μˆ˜λŠ” Array이며, λ°°μ—΄μ˜ ν”„λ‘œν† νƒ€μž… κ°μ²΄λŠ” Array.prototype이닀. Array.prototype은 배열을 μœ„ν•œ 빌트인 λ©”μ„œλ“œλ“€μ„ μ œκ³΅ν•œλ‹€.

const arr = ['apple','banana','orange'];

console.log(arr.constructor === Array); // true

배열은 κ°μ²΄μ§€λ§Œ 일반 κ°μ²΄μ™€λŠ” κ΅¬λ³„λ˜λŠ” λ…νŠΉν•œ νŠΉμ§•μ΄ μžˆλ‹€.

ꡬ뢄 객체 λ°°μ—΄
ꡬ쑰 ν”„λ‘œνΌν‹° 킀와 ν”„λ‘œνΌν‚€ κ°’ μΈλ±μŠ€μ™€ μš”μ†Œ
κ°’μ˜ μ°Έμ‘° ν”„λ‘œνΌν‹° ν‚€ 인덱슀
κ°’μ˜ μˆœμ„œ x o
length ν”„λ‘œνΌν‹° x o

일반 객체와 배열을 κ΅¬λΆ„ν•˜λŠ” κ°€μž₯ λͺ…ν™•ν•œ μ°¨μ΄λŠ” 'κ°’μ˜ μˆœμ„œ'와 'length'ν”„λ‘œνΌν‹°λ‹€. 인덱슀둜 ν‘œν˜„λ˜λŠ” κ°’μ˜ μˆœμ„œμ™€ length ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” 배열은 λ°˜λ³΅λ¬Έμ„ 톡해 순차적으둜 값에 μ ‘κ·Όν•˜κΈ° μ ν•©ν•œ μžλ£Œκ΅¬μ‘°λ‹€.

 

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

  μžλ£Œκ΅¬μ‘°μ—μ„œ λ§ν•˜λŠ” 배열은 λ™μΌν•œ 크기의 λ©”λͺ¨λ¦¬ 곡간이 λΉˆν‹ˆμ—†μ΄ μ—°μ†μ μœΌλ‘œ λ‚˜μ—΄λœ 자료ꡬ쑰λ₯Ό λ§ν•œλ‹€.(밀집 λ°°μ—΄) μ΄λŸ¬ν•œ 밀집 배열은 인덱슀λ₯Ό 톡해 효율적으둜 μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. ν•˜μ§€λ§Œ μ •λ ¬λ˜μ§€ μ•Šμ€ λ°°μ—΄μ—μ„œ νŠΉμ •ν•œ μš”μ†Œλ₯Ό κ²€μƒ‰ν•˜λŠ” 경우 λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ²˜μŒλΆ€ν„° νŠΉμ • μš”μ†Œλ₯Ό λ°œκ²¬ν•  λ•ŒκΉŒμ§€ μ°¨λ‘€λŒ€λ‘œ 검색해야 ν•œλ‹€.(μ„ ν˜• 검색) λ˜ν•œ 배열에 μš”μ†Œλ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ‚­μ œν•˜λŠ” 경우 λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ—°μ†μ μœΌλ‘œ μœ μ§€ν•˜κΈ° μœ„ν•΄ μš”μ†Œλ₯Ό μ΄λ™μ‹œμΌœμ•Ό ν•˜λŠ” 단점도 μžˆλ‹€.

 

  μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열은 μ§€κΈˆκΉŒμ§€ μ‚΄νŽ΄λ³Έ μžλ£Œκ΅¬μ‘°μ—μ„œ λ§ν•˜λŠ” 일반적인 의미의 λ°°μ—΄κ³Ό λ‹€λ₯΄λ‹€. 즉 λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μœ„ν•œ 각각의 λ©”λͺ¨λ¦¬ 곡간은 λ™μΌν•œ 크기λ₯Ό 갖지 μ•Šμ•„λ„ 되며, μ—°μ†μ μœΌλ‘œ 이어져 μžˆμ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€. λ°°μ—΄μ˜ μš”μ†Œκ°€ μ—°μ†μ μœΌλ‘œ 이어져 μžˆμ§€ μ•ŠλŠ” 배열을 ν¬μ†Œ 배열이라 ν•œλ‹€. 이처럼 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열은 일반적 의미의 배열이 μ•„λ‹ˆλ©° μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열은 일반적인 λ°°μ—΄μ˜ λ™μž‘μ„ 흉내 λ‚Έ νŠΉμˆ˜ν•œ 객체닀. μžλ°”μŠ€ν¬λ¦½νŠΈ 배열은 인덱슀λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄μ„ ν”„λ‘œνΌν‹° ν‚€λ‘œ 가지며, length ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” νŠΉμˆ˜ν•œ 객체닀. μ‰½κ²Œ 말해 μš”μ†ŒλŠ” 사싀 ν”„λ‘œνΌν‹° 값이고 μΈλ±μŠ€λŠ” ν”„λ‘œνΌν‹° ν‚€ κΈ°λŠ₯을 ν•˜λŠ” 것이닀. 

 

  μžλ°”μŠ€ν¬λ¦½νŠΈ 배열은 인덱슀둜 λ°°μ—΄ μš”μ†Œμ— μ ‘κ·Όν•˜λŠ” κ²½μš°μ—λŠ” 일반적인 배열보닀 λŠλ¦¬μ§€λ§Œ(이 뢀뢄도 ν˜„μž¬λŠ” μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€.) νŠΉμ • μš”μ†Œλ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜ μš”μ†Œλ₯Ό μ‚½μž… λ˜λŠ” μ‚­μ œν•˜λŠ” κ²½μš°μ—λŠ” 일반적인 배열보닀 λΉ λ₯΄λ‹€.

 

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

  length ν”„λ‘œνΌν‹°λŠ” μš”μ†Œμ˜ 개수, 즉 λ°°μ—΄μ˜ 길이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 0 μ΄μƒμ˜ μ •μˆ˜λ₯Ό κ°’μœΌλ‘œ κ°’λŠ”λ‹€. length ν”„λ‘œνΌν‹°μ˜ 값은 빈 배열일 경우 0이며, 빈 배열이 아닐 경우 κ°€μž₯ 큰 μΈλ±μŠ€μ— 1을 λ”ν•œ 것과 κ°™λ‹€.

console.log([].length); // 0
console.log([1,2,3].length); // 3

length ν”„λ‘œνΌν‹°μ˜ 값은 배열에 μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•˜λ©΄ μžλ™ κ°±μ‹ λœλ‹€.

const arr = [1,2,3];
console.log(arr.length); // 3

arr.push(4);
console.log(arr.length); // 4

arr.pop();
console.log(arr.length); // 3

λ°˜λŒ€λ‘œ length ν”„λ‘œνΌν‹°μ— λͺ…μ‹œμ μœΌλ‘œ 값을 ν• λ‹Ή ν•  수 μžˆλ‹€. λ‹€λ§Œ length ν”„λ‘œνΌν‹° 값보닀 μž‘μ€ 숫자 값을 ν• λ‹Ήν•˜λ©΄ λ°°μ—΄μ˜ 길이가 쀄어든닀.

const arr = [1,2,3];

arr.length = 2;
console.log(arr); // [1, 2]

μ£Όμ˜ν•  것은 ν˜„μž¬ length ν”„λ‘œνΌν‹° 값보닀 큰 숫자 값을 ν• λ‹Ήν•˜λŠ” κ²½μš°λ‹€. μ΄λ•Œ length ν”„λ‘œνΌν‹° 값은 λ³€κ²½λ˜μ§€λ§Œ μ‹€μ œλ‘œ λ°°μ—΄μ˜ 길이가 λŠ˜μ–΄λ‚˜μ§€λŠ” μ•ŠλŠ”λ‹€. 

const arr = [1,2,3];

arr.length = 5;
console.log(arr); // [1, 2, 3, λΉ„μ–΄ 있음 × 2]

μœ„μ˜ 'λΉ„μ–΄ 있음'은 μ‹€μ œλ‘œ μΆ”κ°€λœ λ°°μ—΄μ˜ μš”μ†Œκ°€ μ•„λ‹ˆλ©°, κ°’ 없이 λΉ„μ–΄ μžˆλŠ” μš”μ†Œλ₯Ό μœ„ν•΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜μ§€λ„ μ•Šκ³  빈 μš”μ†Œλ₯Ό μƒμ„±ν•˜μ§€λ„ μ•ŠλŠ”λ‹€. 이처럼 λ°°μ—΄μ˜ μš”μ†Œκ°€ μ—°μ†μ μœΌλ‘œ μœ„μΉ˜ν•˜μ§€ μ•Šκ³  일뢀가 λΉ„μ–΄ μžˆλŠ” 배열을 ν¬μ†Œ 배열이라 ν•œλ‹€. μžλ°”μŠ€ν¬νŠΈλŠ” ν¬μ†Œ 배열을 λ¬Έλ²•μ μœΌλ‘œ ν—ˆμš©ν•œλ‹€. 일반적인 λ°°μ—΄μ˜ lengthλŠ” λ°°μ—΄ μš”μ†Œμ˜ 개수, 즉 λ°°μ—΄μ˜ 길이와 μ–Έμ œλ‚˜ μΌμΉ˜ν•œλ‹€. ν•˜μ§€λ§Œ ν¬μ†Œ 배열은 length와 λ°°μ—΄ μš”μ†Œμ˜ κ°œμˆ˜κ°€ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€. ν¬μ†Œ λ°°μ—΄μ˜ lengthλŠ” ν¬μ†Œ λ°°μ—΄μ˜ μ‹€μ œ μš”μ†Œ κ°œμˆ˜λ³΄λ‹€ μ–Έμ œλ‚˜ 크닀.

 

27.4 λ°°μ—΄ 생성

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

  λ°°μ—΄ λ¦¬ν„°λŸ΄μ€ 0개 μ΄μƒμ˜ μš”μ†Œλ₯Ό μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ λŒ€κ΄„ν˜Έ( [ ] )둜 λ¬ΆλŠ”λ‹€. λ°°μ—΄ λ¦¬ν„°λŸ΄μ€ 객체 λ¦¬ν„°λŸ΄κ³Ό 달리 ν”„λ‘œνΌν‹° ν‚€κ°€ μ—†κ³  κ°’λ§Œ μ‘΄μž¬ν•œλ‹€.

const arr = [1,2,3];

console.log(arr.length); // 3

λ°°μ—΄ λ¦¬ν„°λŸ΄μ— μš”μ†Œλ₯Ό μƒλž΅ν•˜λ©΄ ν¬μ†Œ 배열이 μƒμ„±λœλ‹€.

//μΈλ±μŠ€κ°€ 1인 μš”μ†Œλ₯Ό 갖지 μ•ŠλŠ” ν¬μ†Œ λ°°μ—΄
const arr = [1, ,3];

console.log(arr.length); // 3
console.log(arr); // [1, λΉ„μ–΄ 있음, 3]
console.log(arr[1]); //undefined(ν”„λ‘œνΌν‹° ν‚€κ°€ '1'인 ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ)

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

  Object μƒμ„±μž ν•¨μˆ˜λ₯Ό 톡해 객체λ₯Ό 생성할 수 μžˆλ“―μ΄ Array μƒμ„±μž ν•¨μˆ˜λ₯Ό 톡해 배열을 생성할 수 μžˆλ‹€. Array μƒμ„±μž ν•¨μˆ˜λŠ” μ „λ‹¬λœ 인수의 κ°œμˆ˜μ— 따라 λ‹€λ₯΄κ²Œ λ‹€λ₯΄κ²Œ λ™μž‘ν•œλ‹€.

 

1. μ „λ‹¬λœ μΈμˆ˜κ°€ 1개이고 숫자인 경우 length ν”„λ‘œνΌν‹° 값이 인수인 배열을 μƒμ„±ν•œλ‹€.

const arr = new Array(10);

console.log(arr); // [λΉ„μ–΄ 있음 × 10](μš”μ†Œλ‘œ μƒμ„±λ˜λŠ”κ²Œ μ•„λ‹˜, ν¬μ†Œ 배열을 생성)
console.log(arr.length); // 10

2. μ „λ‹¬λœ μΈμˆ˜κ°€ μ—†λŠ” 경우 빈 배열을 μƒμ„±ν•œλ‹€.(λ°°μ—΄ λ¦¬ν„°λŸ΄κ³Ό κ°™μŒ)

const arr = new Array();

console.log(arr); // []
console.log(arr.length); // 0

3. μ „λ‹¬λœ μΈμˆ˜κ°€ 2개 μ΄μƒμ΄κ±°λ‚˜ μˆ«μžκ°€ μ•„λ‹Œ 경우 인수λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” 배열을 μƒμ„±ν•œλ‹€.

const arr = new Array(1,2,3);

console.log(arr); // [1, 2, 3]
console.log(arr.length); // 3

const arr2 = new Array('apple');

console.log(arr2); // ['apple']
console.log(arr2.length); // 1

4. Array μƒμ„±μž ν•¨μˆ˜λŠ” new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜μ§€ μ•Šλ”λΌλ„, 즉 일반 ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν•΄λ„ 배열을 μƒμ„±ν•˜λŠ” μƒμ„±μž ν•¨μˆ˜λ‘œ λ™μž‘ν•œλ‹€. μ΄λŠ” Array μƒμ„±μž ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ new.target을 ν™•μΈν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.(Object, Function μƒμ„±μž ν•¨μˆ˜λ„ λ§ˆμ°¬κ°€μžμž„)

 

27.4.3 Array.of

  ES6μ—μ„œ λ„μž…λœ Array.of λ©”μ„œλ“œλŠ” μ „λ‹¬λœ 인수λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” 배열을 μƒμ„±ν•œλ‹€. Array μƒμ„±μž ν•¨μˆ˜μ™€ λ‹€λ₯΄κ²Œ μ „λ‹¬λœ μΈμˆ˜κ°€ 1개이고 μˆ«μžμ΄λ”λΌλ„ 인수λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” 배열을 μƒμ„±ν•œλ‹€.

const arr = Array.of(10);

console.log(arr); // [10]
console.log(arr.length); // 1

27.4.4 Array.from

  ES6μ—μ„œ λ„μž…λœ Array.from λ©”μ„œλ“œλŠ” μœ μ‚¬ λ°°μ—΄ 객체 λ˜λŠ” μ΄ν„°λŸ¬λΈ” 객체λ₯Ό 인수둜 전달받아 λ°°μ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.

const arr = Array.from('hello');

console.log(arr); // ['h', 'e', 'l', 'l', 'o']
console.log(arr.length); // 5

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

  λ°°μ—΄ μš”μ†Œμ˜ μ°Έμ‘°λ₯Ό ν•  λ•Œμ—λŠ” λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•œλ‹€. λŒ€κ΄„ν˜Έ μ•ˆμ—λŠ” μΈλ±μŠ€κ°€ 와야 ν•œλ‹€. μ •μˆ˜λ‘œ ν‰κ°€λ˜λŠ” ν‘œν˜„μ‹μ΄λΌλ©΄ 인덱슀 λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλ‹€. μΈλ±μŠ€λŠ” 값을 μ°Έμ‘°ν•  수 μžˆλ‹€λŠ” μ˜λ―Έμ—μ„œ 객체의 ν”„λ‘œνΌν‹° 킀와 같은 역할을 ν•œλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μš”μ†Œμ— μ ‘κ·Όν•˜λ©΄ undefinedκ°€ λ°˜ν™˜λœλ‹€.

const arr = Array.of(1,2,3,4);

console.log(arr[0]); // 1
console.log(arr[2]); // 3
console.log(arr[3]); // 4
console.log(arr[9]); // undefined

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

  객체에 ν”„λ‘œνΌν‹°λ₯Ό λ™μ μœΌλ‘œ μΆ”κ°€ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ 배열에도 μš”μ†Œλ₯Ό λ™μ μœΌλ‘œ μΆ”κ°€ν•  수 μžˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 인덱슀λ₯Ό μ‚¬μš©ν•΄ 값을 ν• λ‹Ήν•˜λ©΄ μƒˆλ‘œμš΄ μš”μ†Œκ°€ μΆ”κ°€λ˜κ³ , 이미 μš”μ†Œκ°€ μ‘΄μž¬ν•˜λŠ” κ²½μš°μ— 값을 μž¬ν• λ‹Ήν•˜λ©΄ μš”μ†Œκ°’μ΄ κ°±μ‹ λœλ‹€. λ§Œμ•½ ν˜„μž¬ λ°°μ—΄μ˜ length ν”„λ‘œνΌν‹° 값보닀 큰 인덱슀둜 μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜λ©΄ λ°°μ—΄μ˜ 쀑간이 ν¬μ†Œ 배열이 λœλ‹€.

const arr = Array.of(1,2,3,4);

arr[0] = 1004; // κ°±μ‹ 
arr[4] = 1005; // μΆ”κ°€
arr[100] = 4000; // ν¬μ†Œ λ°°μ—΄ 생성

console.log(arr); // [1004, 2, 3, 4, 1005, λΉ„μ–΄ 있음 × 95, 4000]
console.log(arr.length); // 101

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

  배열은 사싀 객체이기 λ•Œλ¬Έμ— λ°°μ—΄μ˜ νŠΉμ • μš”μ†Œλ₯Ό μ‚­μ œν•˜κΈ° μœ„ν•΄ delete μ—°μ‚¬μžλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ‚­μ œν•˜λ©΄ ν¬μ†Œ 배열이 λœλ‹€.

const arr = Array.of(1,2,3,4);

delete arr[1]

console.log(arr); // [1, λΉ„μ–΄ 있음, 3, 4]
console.log(arr.length); // 4

ν¬μ†Œ 배열을 λ§Œλ“€μ§€ μ•ŠμœΌλ©΄μ„œ λ°°μ—΄μ˜ νŠΉμ • μš”μ†Œλ₯Ό μ™„μ „νžˆ μ‚­μ œν•˜λ €λ©΄ Array.prototype.splice λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

const arr = Array.of(1,2,3,4);


//Array.prototype.splice(μ‚­μ œλ₯Ό μ‹œμž‘ν•  인덱슀, μ‚­μ œν•  μš”μ†Œ 수)
arr.splice(1,2); // 1번 인덱슀 λΆ€ν„° 2개 μ‚­μ œ

console.log(arr); // [1, 4]
console.log(arr.length); // 2

 

27.8 λ°°μ—΄ λ©”μ„œλ“œ

  λ°°μ—΄ λ©”μ„œλ“œλŠ” 결과물을 λ°˜ν™˜ν•˜λŠ” νŒ¨ν„΄μ΄ 두 κ°€μ§€μ΄λ―€λ‘œ μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€.

1. 원본 배열을 직접 λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œ

2. 원본 배열을 직접 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œκ°€ μžˆλ‹€.

 

1) Array.isArray

Array μƒμ„±μž ν•¨μˆ˜μ˜ 정적 λ©”μ„œλ“œ

μ „λ‹¬λœ μΈμˆ˜κ°€ 배열이면 true, 배열이 μ•„λ‹ˆλ©΄ falseλ₯Ό λ°˜ν™˜

 

2) Array.prototype.indexOf

원본 λ°°μ—΄μ—μ„œ 인수둜 μ „λ‹¬λœ μš”μ†Œλ₯Ό κ²€μƒ‰ν•˜μ—¬ 인덱슀λ₯Ό λ°˜ν™˜

 

3) Array.prototype.push

인수둜 전달받은 λͺ¨λ“  값을 원본 λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•˜κ³  λ³€κ²½λœ length ν”„λ‘œνΌν‹° 값을 λ°˜ν™˜

원본 배열을 직접 변경함

 

4) Array.prototype.pop

원본 λ°°μ—΄μ—μ„œ λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  μ œκ±°ν•œ μš”μ†Œλ₯Ό λ°˜ν™˜

원본 배열을 직접 변경함

 

5) Array.prototype.unshift

인수둜 전달받은 λͺ¨λ“  값을 원본 λ°°μ—΄μ˜ 선두에 μš”μ†Œλ‘œ μΆ”κ°€ν•˜κ³  λ³€κ²½λœ length ν”„λ‘œνΌν‹°λ₯Ό λ°˜ν™˜

원본 배열을 직접 변경함

 

6) Array.prototype.shift

원본 λ°°μ—΄μ—μ„œ 첫 번째 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  μ œκ±°ν•œ μš”μ†Œλ₯Ό λ°˜ν™˜

원본 배열을 직접 변경함

 

7) Array.prototype.concat

인수둜 μ „λ‹¬λœ 값듀을 원본 λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ 

인수둜 μ „λ‹¬λœ 값이 배열인 경우 배열을 ν•΄μ²΄ν•˜μ—¬ μƒˆλ‘œμš΄ λ°°μ—΄μ˜ μš”μ†Œλ‘œ μΆ”κ°€

원본 배열은 λ³€κ²½ μ•ˆλ¨

 

8) Array.prototype.splice

원본 λ°°μ—΄μ˜ 쀑간에 μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ 쀑간에 μžˆλŠ” μš”μ†Œλ₯Ό μ œκ±°ν•¨

3개의 λ§€κ°œλ³€μˆ˜λ₯Ό κ°–μŒ (원본 λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ œκ±°ν•˜κΈ° μ‹œμž‘ν•  인덱슀 / μ œκ±°ν•  μš”μ†Œμ˜ 개수(μ˜΅μ…˜) / μ œκ±°ν•œ μœ„μΉ˜μ— μ‚½μž…ν•  μš”μ†Œ λͺ©λ‘(μ˜΅μ…˜))

원본 배열을 직접 변경함

 

9) Array.prototype.slice

인수둜 μ „λ‹¬λœ λ²”μœ„μ˜ μš”μ†Œλ“€μ„ λ³΅μ‚¬ν•˜μ—¬ λ°°μ—΄λ‘œ λ°˜ν™˜

원본 배열은 λ³€κ²½ μ•ˆλ¨

 

10) Array.prototype.join

원본 λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œ ν›„, 인수둜 전달받은 λ¬Έμžμ—΄, 즉 κ΅¬λΆ„μžλ‘œ μ—°κ²°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜

κ΅¬λΆ„μžλŠ” μƒλž΅ κ°€λŠ₯(κΈ°λ³Έ κ΅¬λΆ„μž : , )

 

11) Array.prototype.reverse

원본 λ°°μ—΄μ˜ μˆœμ„œλ₯Ό λ°˜λŒ€λ‘œ λ’€μ§‘μŒ

원본 배열을 μ§μ ‘ 변경함

 

12) Array.prototype.fill

인수둜 전달받은 값을 λ°°μ—΄μ˜ μ²˜μŒλΆ€ν„° λκΉŒμ§€ μš”μ†Œλ‘œ 채움

원본 배열을 μ§μ ‘ 변경함

 

13) Array.prototype.includes

λ°°μ—΄ 내에 νŠΉμ • μš”μ†Œκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ λΆˆλ¦¬μ–Έκ°’ λ°˜ν™˜

2개의 λ§€κ°œλ³€μˆ˜λ₯Ό κ°–μŒ(검색할 λŒ€μƒ 지정, 검색을 μ‹œμž‘ν•  인덱슀 전달(μ˜΅μ…˜, μƒλž΅μ‹œ 0이 κΈ°λ³Έκ°’μž„))

 

14) Array.prototype.flat

인수둜 μ „λ‹¬ν•œ 깊이만큼 μž¬κ·€μ μœΌλ‘œ 배열을 평탄화 함

평탄화할 깊이λ₯Ό 인수둜 전달(μ˜΅μ…˜, μƒλž΅μ‹œ κΈ°λ³Έκ°’ 1μž„/Infinity μ „λ‹¬μ‹œ λͺ¨λ“  쀑첩 λ°°μ—΄ 평탄화)