Language/JavaScript

[JS] πŸ“š μžλ°”μŠ€ν¬λ¦½νŠΈ Array λ©”μ†Œλ“œ πŸ’― 총정리

인파_ 2021. 9. 25. 06:35

μžλ°”μŠ€ν¬λ¦½νŠΈ-Array-λ©”μ†Œλ“œ

μžλ°”μŠ€ν¬λ¦½νŠΈ Array λ©”μ†Œλ“œ

 

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

const arr = [
  'zero', 'one', 'two', 'three', 'four',
  'five', 'six', 'seven', 'eight', 'nine'
];

​

λ°°μ—΄ μƒμ„±μž

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

const arr2 = new Array(20); // 인수 ν•˜λ‚˜λ§Œ λ„˜κ²¨μ€„λ•ŒλŠ” κ·Έ μΈμˆ˜κ°€ 배열길이
arr2.length // 20

λ°°μ—΄ Method

  • β€‹βœοΈ λ©”μ†Œλ“œλŠ” this(원본 λ°°μ—΄)λ₯Ό λ³€κ²½ν•œλ‹€.
  • πŸ”’ λ©”μ†Œλ“œλŠ” this(원본 λ°°μ—΄)λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

Array.isArray(arg) : boolean

정적 λ©”μ†Œλ“œ Array.isArrayλŠ” 주어진 μΈμˆ˜κ°€ 배열이면 true, 배열이 μ•„λ‹ˆλ©΄ falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

​

Array.from

ES6μ—μ„œ μƒˆλ‘­κ²Œ λ„μž…λœ Array.from λ©”μ†Œλ“œλŠ” νŠΉμ • 객체λ₯Ό λ³€ν™˜ν•˜μ—¬ μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•œλ‹€.

λ³€ν™˜ ν•  수 μžˆλŠ” νŠΉμ •ν•œ κ°μ²΄λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • μœ μ‚¬λ°°μ—΄ 객체(array-like objects) : length ν”„λ‘œνΌν‹°μ™€ 인덱슀 된 μš”μ†Œλ₯Ό 가지고 μžˆλŠ” 객체
  • μ΄ν„°λŸ¬λΈ” 객체 (iterable objects) : Mapκ³Ό Set 객체 및 λ¬Έμžμ—΄κ³Ό 같이 ν•΄λ‹Ή μš”μ†Œλ₯Ό κ°œλ³„μ μœΌλ‘œ 선택할 수 μžˆλŠ” 객체
// λ¬Έμžμ—΄μ€ μ΄ν„°λŸ¬λΈ”μ΄λ‹€.
const arr1 = Array.from('Hello');
console.log(arr1); // [ 'H', 'e', 'l', 'l', 'o' ]

// μœ μ‚¬ λ°°μ—΄ 객체λ₯Ό μƒˆλ‘œμš΄ 배열을 λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.
const arr2 = Array.from({ length: 2, 0: 'a', 1: 'b' });
console.log(arr2); // [ 'a', 'b' ]

// Array.from의 λ‘λ²ˆμ§Έ λ§€κ°œλ³€μˆ˜μ—κ²Œ λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•΄ ν˜ΈμΆœν•  ν•¨μˆ˜λ₯Ό 전달할 수 μžˆλ‹€.
// 이 ν•¨μˆ˜λŠ” 첫번째 λ§€κ°œλ³€μˆ˜μ—κ²Œ μ „λ‹¬λœ 인수둜 μƒμ„±λœ λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 인수둜 전달받아 ν˜ΈμΆœλœλ‹€.
const arr3 = Array.from({ length: 5 }, function (v, i) { return i; });
console.log(arr3); // [ 0, 1, 2, 3, 4 ]

​

Array.of

ES6μ—μ„œ μƒˆλ‘­κ²Œ λ„μž…λœ Array.of λ©”μ†Œλ“œλŠ” μ „λ‹¬λœ 인수λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” 배열을 μƒμ„±ν•œλ‹€.

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

// μ „λ‹¬λœ μΈμˆ˜κ°€ 1개이고 μˆ«μžμ΄λ”λΌλ„ 인수λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” 배열을 μƒμ„±ν•œλ‹€.
const arr1 = Array.of(1);
console.log(arr1); // // [1]

const arr2 = Array.of(1, 2, 3);
console.log(arr2); // [1, 2, 3]

const arr3 = Array.of('string');
console.log(arr3); // 'string'

​

✏️ Array.fill(value, start, end)

λ°°μ—΄μ˜ μ‹œμž‘ μΈλ±μŠ€λΆ€ν„° λ 인덱슀 이전 (끝 인덱슀 μžκΈ°μžμ‹ μ€ 미포함) κΉŒμ§€ ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ μ±„μ›Œμ£ΌλŠ” λ©”μ„œλ“œμ΄λ‹€.
원본배열을 직접 λ³€κ²½ν•˜λ©°, 리턴값은 λ³€ν˜•ν•œ 배열이닀.

  • value : 배열을 μ±„μšΈ κ°’.
  • start : μ‹œμž‘μΈλ±μŠ€, κΈ°λ³Έκ°’ 0. μ˜΅μ…˜
  • end : 끝인덱슀, κΈ°λ³Έκ°’ arr.length. μ˜΅μ…˜
// 길이가 6이고 λ°°μ—΄μ˜ μ›μ†Œκ°€ λͺ¨λ‘ 0인 배열을 λ§Œλ“€κΈ°

// λ¦¬ν„°λŸ΄ 방법
const zeroArray = [0, 0, 0, 0, 0, 0];

// fill()λ©”μ†Œλ“œ 방법
const zeroArray2 = Array(6).fill(0);
console.log(nullArray); // [0, 0, 0, 0, 0, 0]
[1, 2, 3].fill(4)                // [4, 4, 4] λͺ¨λ‘ 4둜 채룸
[1, 2, 3].fill(4, 1)             // [1, 4, 4] 1번째 인덱슀 λΆ€ν„° μ­‰ 4둜 채움
[1, 2, 3].fill(4, 1, 2)          // [1, 4, 3] 1λ²ˆμ§Έμ—μ„œ 2번째 인덱슀 μ „κΉŒμ§€ 4둜 채움
// fill ()을 μ‚¬μš©ν•˜μ—¬ λͺ¨λ‘ 1의 ν–‰λ ¬(2차원 λ°°μ—΄) λ§Œλ“€κΈ°
const arr = new Array(3);

for (let i=0; i<arr.length; i++) {
  arr[i] = new Array(4).fill(1); // 크기가 4이고 1둜 μ±„μ›Œμ§„ λ°°μ—΄ 생성
}

console.log(arr[0][0]); // 1
console.log(arr[1][0]); // 1
console.log(arr[2][0]); // 1

 

πŸ”’ Array.prototype.indexOf(searchElement, fromIndex) : number

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

  • μ€‘λ³΅λ˜λŠ” μš”μ†Œκ°€ μžˆλŠ” 경우, 첫번째 인덱슀λ₯Ό λ°˜ν™˜ν•œλ‹€.
  • ν•΄λ‹Ήν•˜λŠ” μš”μ†Œκ°€ μ—†λŠ” 경우, -1을 λ°˜ν™˜ν•œλ‹€.

β€‹λ‘λ²ˆμ§Έ μΈμˆ˜λŠ” 검색을 μ‹œμž‘ν•  μΈλ±μŠ€μ΄λ‹€. λ‘λ²ˆμ§Έ 인수λ₯Ό μƒλž΅ν•˜λ©΄ μ²˜μŒλΆ€ν„° κ²€μƒ‰ν•œλ‹€.

indexOf λ©”μ†Œλ“œλŠ” 배열에 μš”μ†Œκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό 확인할 λ•Œ μœ μš©ν•˜λ‹€.

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

// foods 배열에 'orange' μš”μ†Œκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인
if (foods.indexOf('orange') === -1) { // == if (!foods.includes('orange')) { } 
  foods.push('orange');
}

console.log(foods); // ["apple", "banana", "orange"]

​

πŸ”’ Array.prototype.concat(…items) : T[]

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

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

원본 배열은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

const arr1 = [1, 2];
const arr2 = [3, 4];

// λ°°μ—΄ arr2λ₯Ό 원본 λ°°μ—΄ arr1의 λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜
// 인수둜 μ „λ‹¬ν•œ 값이 배열인 경우, 배열을 ν•΄μ²΄ν•˜μ—¬ μƒˆλ‘œμš΄ λ°°μ—΄μ˜ μš”μ†Œλ‘œ μΆ”κ°€ν•œλ‹€.
let result = arr1.concat(arr2);
console.log(result); // [1, 2, 3, 4]

// 숫자λ₯Ό 원본 λ°°μ—΄ arr1의 λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜
result = arr1.concat(3);
console.log(result); // [1, 2, 3]

//  λ°°μ—΄ arr2와 숫자λ₯Ό 원본 λ°°μ—΄ arr1의 λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜
result = arr1.concat(arr2, 5);
console.log(result); // [1, 2, 3, 4, 5]

// 원본 배열은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.
console.log(arr1); // [1, 2]

​

πŸ”’ Array.prototype.join(separator) : string

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

κ΅¬λΆ„μž(separator)λŠ” μƒλž΅ κ°€λŠ₯ν•˜λ©° κΈ°λ³Έ κ΅¬λΆ„μžλŠ” ,이닀.

const arr = [1, 2, 3, 4];

// κΈ°λ³Έ κ΅¬λΆ„μžλŠ” ','이닀.
// 원본 λ°°μ—΄ arr의 λͺ¨λ“  μš”μ†Œλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œ ν›„, κΈ°λ³Έ κ΅¬λΆ„μž ','둜 μ—°κ²°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜
let result = arr.join();
console.log(result); // '1,2,3,4';

// 원본 λ°°μ—΄ arr의 λͺ¨λ“  μš”μ†Œλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œ ν›„, λΉˆλ¬Έμžμ—΄λ‘œ μ—°κ²°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜
result = arr.join('');
console.log(result); // '1234'

// 원본 λ°°μ—΄ arr의 λͺ¨λ“  μš”μ†Œλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œ ν›„, κ΅¬λΆ„μž ':'둜 μ—°κ²°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜
result = arr.join(':');
console.log(result); // '1:2:3:4'

​

✏️ Array.prototype.push(…items) : number

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

​

πŸ’‘ push λ©”μ†Œλ“œμ™€ concat λ©”μ†Œλ“œλŠ” μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•˜μ§€λ§Œ λ―Έλ¬˜ν•œ 차이가 μžˆλ‹€.

  • push λ©”μ†Œλ“œλŠ” 원본 배열을 직접 λ³€κ²½ν•˜μ§€λ§Œ,
  • concat λ©”μ†Œλ“œλŠ” 원본 배열을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€.
const arr1 = [1, 2];
// push λ©”μ†Œλ“œλŠ” 원본 배열을 직접 λ³€κ²½ν•œλ‹€.
arr1.push(3, 4);
console.log(arr1); // [1, 2, 3, 4]

const arr2 = [1, 2];
// concat λ©”μ†Œλ“œλŠ” 원본 배열을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€.
const result = arr2.concat(3, 4);
console.log(result); // [1, 2, 3, 4]

 

πŸ’‘ 인수둜 전달받은 값이 배열인 경우,

  • push λ©”μ†Œλ“œλŠ” 배열을 κ·ΈλŒ€λ‘œ 원본 λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•˜μ§€λ§Œ
  • concat λ©”μ†Œλ“œλŠ” 배열을 ν•΄μ²΄ν•˜μ—¬ μƒˆλ‘œμš΄ λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œλ‹€.
const arr1 = [1, 2];
// 인수둜 전달받은 배열을 κ·ΈλŒ€λ‘œ 원본 λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œλ‹€
arr1.push([3, 4]);
console.log(arr1); // [1, 2, [3, 4]]

const arr2 = [1, 2];
// 인수둜 전달받은 배열을 ν•΄μ²΄ν•˜μ—¬ μƒˆλ‘œμš΄ λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ‘œ μΆ”κ°€ν•œλ‹€
const result = arr2.concat([3, 4]);
console.log(result); // [1, 2, 3, 4]

​

πŸ’‘ push λ©”μ†Œλ“œλŠ” μ„±λŠ₯λ©΄μ—μ„œ 쒋지 μ•Šλ‹€.

push λ©”μ†Œλ“œλŠ” λ°°μ—΄μ˜ λ§ˆμ§€λ§‰μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜λ―€λ‘œ length ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ 직접 μš”μ†Œλ₯Ό μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹€.

이 방법이 push λ©”μ†Œλ“œλ³΄λ‹€ λΉ λ₯΄λ‹€.

const arr = [1, 2];

// arr.push(3)와 λ™μΌν•œ 처리λ₯Ό ν•œλ‹€. 이 방법이 push λ©”μ†Œλ“œλ³΄λ‹€ λΉ λ₯΄λ‹€.
arr[arr.length] = 3;

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

​

πŸ’‘ push λ©”μ†Œλ“œλŠ” 원본 배열을 직접 λ³€κ²½ν•˜λŠ” λΆ€μˆ˜ νš¨κ³Όκ°€ μžˆλ‹€. λ”°λΌμ„œ push λ©”μ†Œλ“œλ³΄λ‹€λŠ” ES6의 spread 문법(μ „κ°œμ—°μ‚°μž)을 μ‚¬μš©ν•˜λŠ” 편이 μ’‹λ‹€.

const arr = [1, 2];

// ES6 spread 문법
const newArr = [...arr, 3];
// arr.push(3);

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

​

✏️ Array.prototype.pop() : T | undefined

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

원본 배열이 빈 배열이면 undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

pop λ©”μ†Œλ“œλŠ” 원본 배열을 직접 λ³€κ²½ν•œλ‹€.

const a = ['a', 'b', 'c'];
const c = a.pop();

// 원본 배열이 λ³€κ²½λœλ‹€.
console.log(a); // a --> ['a', 'b']
console.log(c); // c --> 'c'

​

✏️ Array.prototype.shift() : T | undefined

λ°°μ—΄μ—μ„œ μ²«μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  μ œκ±°ν•œ μš”μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

λ§Œμ•½ 빈 배열일 경우 undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€. shift λ©”μ†Œλ“œλŠ” λŒ€μƒ λ°°μ—΄ 자체λ₯Ό λ³€κ²½ν•œλ‹€.

​

πŸ”₯ shiftλŠ” push와 ν•¨κ»˜ 배열을 큐(FIFO: First In First Out)처럼 λ™μž‘ν•˜κ²Œ ν•œλ‹€.

const arr = [];

arr.push(1); // [1]
arr.push(2); // [1, 2]
arr.push(3); // [1, 2, 3]

arr.shift(); // [2, 3]
arr.shift(); // [3]
arr.shift(); // []

μžλ°”μŠ€ν¬λ¦½νŠΈ-Array-λ©”μ†Œλ“œ

​

✏️ Array.prototype.reverse() : this

λ°°μ—΄ μš”μ†Œμ˜ μˆœμ„œλ₯Ό λ°˜λŒ€λ‘œ λ³€κ²½ν•œλ‹€.

μ΄λ•Œ 원본 배열이 λ³€κ²½λœλ‹€. λ°˜ν™˜κ°’μ€ λ³€κ²½λœ 배열이닀.

​

​

πŸ”’ Array.prototype.slice(start, end) : T[]

인자둜 μ§€μ •λœ λ°°μ—΄μ˜ 뢀뢄을 λ³΅μ‚¬ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.

원본 배열은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

  • start : 볡사λ₯Ό μ‹œμž‘ν•  μΈν…μŠ€. 음수인 경우 λ°°μ—΄μ˜ λμ—μ„œμ˜ 인덱슀λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 예λ₯Ό λ“€μ–΄ slice(-2)λŠ” λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ 2개의 μš”μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • end : μ˜΅μ…˜μ΄λ©° 기본값은 length 값이닀.
const items = ['a', 'b', 'c'];

// items[0]λΆ€ν„° items[1] 이전(items[1] 미포함)κΉŒμ§€ λ°˜ν™˜
let res = items.slice(0, 1);
console.log(res);  // [ 'a' ]

// items[1]λΆ€ν„° items[2] 이전(items[2] 미포함)κΉŒμ§€ λ°˜ν™˜
res = items.slice(1, 2);
console.log(res);  // [ 'b' ]

// items[1]λΆ€ν„° μ΄ν›„μ˜ λͺ¨λ“  μš”μ†Œ λ°˜ν™˜
res = items.slice(1);
console.log(res);  // [ 'b', 'c' ]

// μΈμžκ°€ 음수인 경우 λ°°μ—΄μ˜ λμ—μ„œ μš”μ†Œλ₯Ό λ°˜ν™˜
res = items.slice(-1);
console.log(res);  // [ 'c' ]

res = items.slice(-2);
console.log(res);  // [ 'b', 'c' ]

// λͺ¨λ“  μš”μ†Œλ₯Ό λ°˜ν™˜ (= 볡사본(shallow copy) 생성)
res = items.slice();
console.log(res);  // [ 'a', 'b', 'c' ]

μžλ°”μŠ€ν¬λ¦½νŠΈ-Array-λ©”μ†Œλ“œ

​

​

πŸ’‘ slice λ©”μ†Œλ“œμ— 인자λ₯Ό μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ 원본 λ°°μ—΄μ˜ 볡사본을 μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€. μ΄λ•Œ 원본 λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό 얕은 볡사(shallow copy)ν•˜μ—¬ μƒˆλ‘œμš΄ 볡사본을 μƒμ„±ν•œλ‹€.

const todos = [
  { id: 1, content: 'HTML', completed: false },
  { id: 2, content: 'CSS', completed: true },
  { id: 3, content: 'Javascript', completed: false }
];

// shallow copy
const _todos = todos.slice();
// const _todos = [...todos];
console.log(_todos === todos); // false

// λ°°μ—΄μ˜ μš”μ†ŒλŠ” κ°™λ‹€. 즉, 얕은 λ³΅μ‚¬λ˜μ—ˆλ‹€.
console.log(_todos[0] === todos[0]); // true

​

πŸ’‘ μ΄λ₯Ό μ΄μš©ν•˜μ—¬ arguments, HTMLCollection, NodeList와 같은 μœ μ‚¬ λ°°μ—΄ 객체(Array-like Object)λ₯Ό λ°°μ—΄λ‘œ λ³€ν™˜ν•  수 μžˆλ‹€.

function sum() {
  // μœ μ‚¬ λ°°μ—΄ 객체 => Array
  const arr = Array.prototype.slice.call(arguments); // [1, 2, 3]
 
  const arr0 = [].slice.call(arguments); // [1, 2, 3]
 
  // Spread 문법
  const arr1 = [...arguments]; // [1, 2, 3]
 
  // Array.from λ©”μ†Œλ“œλŠ” μœ μ‚¬ λ°°μ—΄ 객체λ₯Ό λ³΅μ‚¬ν•˜μ—¬ 배열을 μƒμ„±ν•œλ‹€.
  const arr2 = Array.from(arguments); // [1, 2, 3]

}

console.log(sum(1, 2, 3));

​

✏️ Array.prototype.splice(start, deleteCount, …items) : T[]

  • start : λ°°μ—΄μ—μ„œμ˜ μ‹œμž‘ μœ„μΉ˜ 인덱슀 μ΄λ‹€. start λ§Œμ„ μ§€μ •ν•˜λ©΄ λ°°μ—΄μ˜ startλΆ€ν„° λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•œλ‹€.
  • deleteCount : μ‹œμž‘ μœ„μΉ˜(start)λΆ€ν„° μ œκ±°ν•  μš”μ†Œμ˜ μˆ˜μ΄λ‹€. deleteCountκ°€ 0인 경우, μ•„λ¬΄λŸ° μš”μ†Œλ„ μ œκ±°λ˜μ§€ μ•ŠλŠ”λ‹€. (μ˜΅μ…˜)
  • items : μ‚­μ œν•œ μœ„μΉ˜μ— 좔가될 μš”μ†Œλ“€μ΄λ‹€. λ§Œμ•½ μ•„λ¬΄λŸ° μš”μ†Œλ„ μ§€μ •ν•˜μ§€ μ•Šμ„ 경우, μ‚­μ œλ§Œ ν•œλ‹€. (μ˜΅μ…˜)

총 3κ°€μ§€μ˜ κΈ°λŠ₯으둜 μ‚¬μš©λ μˆ˜ μžˆλ‹€.
  1) λ°°μ—΄ μš”μ†Œ μΆ”κ°€ (μ‚­μ œ μ•ˆν•˜κ³  μΆ”κ°€)
  2) λ°°μ—΄ μš”μ†Œ ꡐ체 (μ‚­μ œν•˜κ³  μΆ”κ°€)
  3) λ°°μ—΄ μš”μ†Œ μ‚­μ œ (μΆ”κ°€ μ•ˆν•˜κ³  μ‚­μ œ)

 

  - λ°˜ν™˜κ°’μ€ μ‚­μ œν•œ μš”μ†Œλ“€μ„ 가진 배열이닀.

​

πŸ’‘ μ΄ λ©”μ†Œλ“œμ˜ κ°€μž₯ 일반적인 μ‚¬μš©μ€ λ°°μ—΄μ—μ„œ μš”μ†Œλ₯Ό μ‚­μ œν•  λ•Œλ‹€.

const items1 = [1, 2, 3, 4];

// items[1]λΆ€ν„° 2개의 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  제거된 μš”μ†Œλ₯Ό λ°°μ—΄λ‘œ λ°˜ν™˜
const res1 = items1.splice(1, 2);

// 원본 배열이 λ³€κ²½λœλ‹€.
console.log(items1); // [ 1, 4 ]
// μ œκ±°ν•œ μš”μ†Œκ°€ λ°°μ—΄λ‘œ λ°˜ν™˜λœλ‹€.
console.log(res1);   // [ 2, 3 ]

// -------------------------------------------

const items2 = [1, 2, 3, 4];

// items[1]λΆ€ν„° λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  제거된 μš”μ†Œλ₯Ό λ°°μ—΄λ‘œ λ°˜ν™˜
const res2 = items2.splice(1);

// 원본 배열이 λ³€κ²½λœλ‹€.
console.log(items2); // [ 1 ]
// μ œκ±°ν•œ μš”μ†Œκ°€ λ°°μ—΄λ‘œ λ°˜ν™˜λœλ‹€.
console.log(res2);   // [ 2, 3, 4 ]

μžλ°”μŠ€ν¬λ¦½νŠΈ-Array-λ©”μ†Œλ“œ

​

​

πŸ’‘ λ°°μ—΄μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  μ œκ±°ν•œ μœ„μΉ˜μ— λ‹€λ₯Έ μš”μ†Œλ₯Ό μΆ”κ°€ν•œλ‹€. (ꡐ체)

const items = [1, 2, 3, 4];

// items[1]λΆ€ν„° 2개의 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  κ·Έμžλ¦¬μ— μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•œλ‹€. 제거된 μš”μ†Œκ°€ λ°˜ν™˜λœλ‹€.
const res = items.splice(1, 2, 20, 30);

// 원본 배열이 λ³€κ²½λœλ‹€.
console.log(items); // [ 1, 20, 30, 4 ]
// μ œκ±°ν•œ μš”μ†Œκ°€ λ°°μ—΄λ‘œ λ°˜ν™˜λœλ‹€.
console.log(res);   // [ 2, 3 ]

μžλ°”μŠ€ν¬λ¦½νŠΈ-Array-λ©”μ†Œλ“œ

​

​

πŸ’‘ λ°°μ—΄ 쀑간에 μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•  λ•Œλ„ μ‚¬μš©λœλ‹€. (0개λ₯Ό μ‚­μ œ)

const items = [1, 2, 3, 4];

// items[1]λΆ€ν„° 0개의 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  그자리(items[1])에 μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•œλ‹€. 제거된 μš”μ†Œκ°€ λ°˜ν™˜λœλ‹€.
const res = items.splice(1, 0, 100);

// 원본 배열이 λ³€κ²½λœλ‹€.
console.log(items); // [ 1, 100, 2, 3, 4 ]
// μ œκ±°ν•œ μš”μ†Œκ°€ λ°°μ—΄λ‘œ λ°˜ν™˜λœλ‹€.
console.log(res);   // [ ]

​

πŸ’‘ λ°°μ—΄ 쀑간에 배열을 μΆ”κ°€ν•  λ•Œλ„ μ‚¬μš©λœλ‹€.

const items = [1, 4];
const items2 = [2, 3];

// 원본배열 itemλ₯Ό μ•„κ·œλ¨ΌνŠΈ 인자둜 items2λ₯Ό λ°›μ•„μ„œ,
// items[1]λΆ€ν„° 0개의 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  그자리(items[1])에 μƒˆλ‘œμš΄ λ°°μ—΄λ₯Ό μΆ”κ°€ν•œλ‹€. 

// μ΄λ ‡κ²Œ ν•˜λ©΄ μ•„κ·œλ¨ΌνŠΈκ°€ 2μ°¨μ›ν˜•νƒœκ°€ λ˜μ–΄λ²„λ¦°λ‹€. ( 1, [ 2, 3 ], 4 )
items.splice(1, 0, items2);

// apply둜 itemsλ₯Ό μ£Όκ³ , [1, 0].concat([2, 3])의 κ²°κ³Ό 인자 1,0, 2,3을 μ£Όκ²Œλ˜λŠ” 꼴이 λœλ‹€.
Array.prototype.splice.apply(items, [1, 0].concat([2, 3]));

items.splice(1,0, 2,3)
// == [].splice.apply(items, [1, 0].concat([2, 3]));
// == items.splice(1, 0, ...items);

console.log(items); // [ 1, 2, 3, 4 ]

sliceλŠ” λ°°μ—΄μ˜ 일뢀뢄을 λ³΅μ‚¬ν•΄μ„œ λ°˜ν™˜ν•˜λ©° 원본을 ν›Όμ†ν•˜μ§€ μ•ŠλŠ”λ‹€.

spliceλŠ” λ°°μ—΄μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  μ œκ±°ν•œ μœ„μΉ˜μ— λ‹€λ₯Έ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜λ©° 원본을 ν›Όμ†ν•œλ‹€.


λ©”μ†Œλ“œ μ„€λͺ…
Array.isArray() μ „λ‹¬λœ 값이 Array 객체인지 μ•„λ‹Œμ§€λ₯Ό 검사함.
Array.from() λ°°μ—΄κ³Ό λΉ„μŠ·ν•œ 객체와 λ°˜λ³΅ν•  수 μžˆλŠ” 객체λ₯Ό λ°°μ—΄μ²˜λŸΌ λ³€ν™˜ν•¨.
Array.of() 인수의 μˆ˜λ‚˜ νƒ€μž…μ— 상관없이 인수둜 전달받은 값을 가지고 μƒˆλ‘œμš΄ Array μΈμŠ€ν„΄μŠ€λ₯Ό 생성함.

 

ν”„λ‘œν† νƒ€μž…
λ©”μ†Œλ“œ
μ„€λͺ…
push() ν•˜λ‚˜ μ΄μƒμ˜ μš”μ†Œλ₯Ό λ°°μ—΄μ˜ κ°€μž₯ λ§ˆμ§€λ§‰μ— μΆ”κ°€ν•˜κ³ , λ°°μ—΄μ˜ 총 길이λ₯Ό λ°˜ν™˜ν•¨.
pop() λ°°μ—΄μ˜ κ°€μž₯ λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³ , κ·Έ 제거된 μš”μ†Œλ₯Ό λ°˜ν™˜ν•¨.
shift() λ°°μ—΄μ˜ κ°€μž₯ 첫 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³ , κ·Έ 제거된 μš”μ†Œλ₯Ό λ°˜ν™˜ν•¨.
unshift() ν•˜λ‚˜ μ΄μƒμ˜ μš”μ†Œλ₯Ό λ°°μ—΄μ˜ κ°€μž₯ μ•žμ— μΆ”κ°€ν•˜κ³ , λ°°μ—΄μ˜ 총 길이λ₯Ό λ°˜ν™˜ν•¨.
reverse() λ°°μ—΄ μš”μ†Œμ˜ μˆœμ„œλ₯Ό μ „λΆ€ λ°˜λŒ€λ‘œ ꡐ체함.
sort() ν•΄λ‹Ή λ°°μ—΄μ˜ λ°°μ—΄ μš”μ†Œλ“€μ„ μ•ŒνŒŒλ²³ μˆœμ„œμ— 따라 정렬함.
splice() 기쑴의 λ°°μ—΄ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ λ°°μ—΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜μ—¬ λ°°μ—΄μ˜ λ‚΄μš©μ„ 변경함.
copyWithin() ν•΄λ‹Ή λ°°μ—΄μ—μ„œ 일련의 μš”μ†Œλ“€μ„ λ³΅μ‚¬ν•˜μ—¬, λͺ…μ‹œλœ μœ„μΉ˜μ˜ μš”μ†Œλ“€μ„ ꡐ체함.
fill() μ‹œμž‘ μΈλ±μŠ€λΆ€ν„° μ’…λ£Œ 인덱슀 λ°”λ‘œ μ•žκΉŒμ§€μ˜ λͺ¨λ“  λ°°μ—΄ μš”μ†Œλ₯Ό νŠΉμ • κ°’μœΌλ‘œ ꡐ체함.
join() λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•¨.
slice() 전달받은 μ‹œμž‘ μΈλ±μŠ€λΆ€ν„° μ’…λ£Œ 인덱슀 λ°”λ‘œ μ•žκΉŒμ§€μ˜ λͺ¨λ“  λ°°μ—΄ μš”μ†Œλ₯Ό μΆ”μΆœν•˜μ—¬ λ§Œλ“  μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•¨.
concat() ν•΄λ‹Ή λ°°μ—΄μ˜ 뒀에 인수둜 전달받은 배열을 ν•©μ³μ„œ λ§Œλ“  μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•¨.
toString() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•¨.
toLocaleString() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•¨.
indexOf() 전달받은 κ°’κ³Ό λ™μΌν•œ λ°°μ—΄ μš”μ†Œκ°€ 처음으둜 λ“±μž₯ν•˜λŠ” μœ„μΉ˜μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•¨.
lastIndexOf() 전달받은 κ°’κ³Ό λ™μΌν•œ λ°°μ—΄ μš”μ†Œκ°€ λ§ˆμ§€λ§‰μœΌλ‘œ λ“±μž₯ν•˜λŠ” μœ„μΉ˜μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•¨.
forEach() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•˜μ—¬ 반볡적으둜 λͺ…μ‹œλœ 콜백 ν•¨μˆ˜λ₯Ό 싀행함.
map() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•˜μ—¬ 반볡적으둜 λͺ…μ‹œλœ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ ν›„, κ·Έ μ‹€ν–‰ κ²°κ³Όλ₯Ό μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ λ°˜ν™˜ν•¨.
filter() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•˜μ—¬ 반볡적으둜 λͺ…μ‹œλœ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ ν›„, κ·Έ 결괏값이 true인 μš”μ†Œλ“€λ§Œμ„ μƒˆλ‘œμš΄ 배열에 λ‹΄μ•„ λ°˜ν™˜ν•¨.
every() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•˜μ—¬ 반볡적으둜 λͺ…μ‹œλœ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ ν›„, κ·Έ 결괏값이 λͺ¨λ‘ true일 λ•Œμ—λ§Œ trueλ₯Ό λ°˜ν™˜ν•¨.
some() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•˜μ—¬ 반볡적으둜 λͺ…μ‹œλœ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ ν›„, κ·Έ 결괏값이 ν•˜λ‚˜λΌλ„ true이면 trueλ₯Ό λ°˜ν™˜ν•¨.
reduce() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ 쀄이기 μœ„ν•΄, 두 개의 인수λ₯Ό μ „λ‹¬λ°›λŠ” 콜백 ν•¨μˆ˜λ₯Ό 싀행함.
(λ°°μ—΄μ˜ 첫 번째 μš”μ†ŒλΆ€ν„° μ‹œμž‘ν•¨.)
reduceRight() ν•΄λ‹Ή λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ 쀄이기 μœ„ν•΄, 두 개의 인수λ₯Ό μ „λ‹¬λ°›λŠ” 콜백 ν•¨μˆ˜λ₯Ό 싀행함.
(λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†ŒλΆ€ν„° μ‹œμž‘ν•¨.)
entries() λ°°μ—΄ μš”μ†Œλ³„λ‘œ 킀와 κ°’μ˜ ν•œ 쌍으둜 이루어진 μƒˆλ‘œμš΄ λ°°μ—΄ 반볡자 객체(Array Iterator Object)λ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ λ°˜ν™˜ν•¨.
keys() λ°°μ—΄ μš”μ†Œλ³„λ‘œ ν‚€(key)만 ν¬ν•¨ν•˜λŠ” μƒˆλ‘œμš΄ λ°°μ—΄ 반볡자 객체λ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ λ°˜ν™˜ν•¨.
values() λ°°μ—΄ μš”μ†Œλ³„λ‘œ κ°’(value)만 ν¬ν•¨ν•˜λŠ” μƒˆλ‘œμš΄ λ°°μ—΄ 반볡자 객체λ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ λ°˜ν™˜ν•¨.
find() 검사λ₯Ό μœ„ν•΄ 전달받은 ν•¨μˆ˜λ₯Ό λ§Œμ‘±ν•˜λŠ” λ°°μ—΄ μš”μ†Œμ˜ 값을 λ°˜ν™˜ν•¨. λ§Œμ‘±ν•˜λŠ” 값이 μ—†μœΌλ©΄ undefinedλ₯Ό λ°˜ν™˜ν•¨.
findIndex() 검사λ₯Ό μœ„ν•΄ 전달받은 ν•¨μˆ˜λ₯Ό λ§Œμ‘±ν•˜λŠ” λ°°μ—΄ μš”μ†Œμ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•¨. λ§Œμ‘±ν•˜λŠ” 값이 μ—†μœΌλ©΄ -1을 λ°˜ν™˜ν•¨.