JS 배열 메소드

배열 메소드가 결과물을 반환하는 패턴

  1. 원본 배열(this가 가리키는 객체)을 직접 변경하는 메소드(mutator method)
  2. 원본 배열을 직접 변경하지 않고 배열을생성하여 반환하는 메소드(accessor method)

표시된 메서드는 원본 배열 변경시킴

메서드 이름 설명
concat() 매개변수로 입력한 배열의 요소를 모두 합쳐 배열을 만든 후 리턴
join() 배열 안의 모든 요소를 문자열로 만들어 리턴
pop() * 배열의 마지막 요소를 제거하고 리턴
push() * 배열의 마지막 부분에 새로운 요소를 추가
reverse() * 배열의 요소 순서를 뒤집음
slice() 배열 요소의 지정한 부분을 리턴
sort() * 배열의 요소를 정렬
splice() * 배열 요소의 지정한 부분을 삭제하고 삭제한 요소를 리턴

Array.isArray

  • Array 생성자 함수의 정적 메소드
  • 주어진 인수가 배열이면 true, 배열이 아니면 false를 반환
1
2
Array.isArray([1, 2]); // true
Array.isArray('1'); // false

Array.prototype.push (마지막 요소 추가)

  • 인수로 전달받은 모든 값을 원본 배열(this)의 마지막 요소로 추가하고 변경된 length 값을 반환
  • 원본 배열(this)을 직접 변경 하는 부수 효과가 있다.
  • 성능면에서 좋지 않음.
1
2
3
4
const arr = [1, 2, 3];
let result = arr.push(4, 5);
console.log(result); // 5
console.log(arr); // [1, 2, 3, 4, 5]

배열의 마지막에 요소를 추가하므로 length 프로퍼티를 사용하여 직접 요소를 추가 가능하다.

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

ES6의 스프레드 문법을 사용하는 것이 좋다.

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

Array.prototype.pop (마지막 요소 제거)

  • 원본 배열(this)에서 마지막 요소를 제거하고 제거한 요소를 반환
  • 원본 배열이 빈배열이면 undefined 반환
  • 원본 배열(this)을 직접 변경 하는 부수 효과가 있다.
1
2
3
4
5
const arr = [1, 2, 3, 4, 5];
let result = arr.pop();

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

pop 메소드와 push 메소드를 사용하여 스택(후입선출)을 쉽게 구현 가능하다.

Array.prototype.unshift (처음 요소 추가)

  • 인수로 전달받은 모든 값을 원본배열의 맨 앞에 요소로 추가하고 변경된 length값을 반환.
  • 원본 배열(this)을 직접 변경 하는 부수 효과가 있다.
1
2
3
4
5
const animal = ['bunny', 'kitten', 'puppy'];
let result = animal.unshift('squirrel', 'hamster');
console.log(result); // 5
console.log(animal);
// ['squirrel', 'hamster', 'bunny', 'kitten', 'puppy']

ES6의 스프레드 문법을 사용하는 것이 좋다.

1
2
3
4
const animal = ['bunny', 'kitten', 'puppy'];
const newAnimal = ['squirrel', 'hamster', ...animal];
console.log(newAnimal);
// ['squirrel', 'hamster', 'bunny', 'kitten', 'puppy']

Array.prototype.shift (첫번째 요소 제거)

  • 원본 배열에서 첫번째 요소를 제거하고 제거한 요소를 반환
  • 원본 배열이 빈 배열이면 undefined를 반환
  • 원본 배열(this)을 직접 변경 하는 부수 효과가 있다.
1
2
3
4
const arr = [1, 2, 3];
let result = arr.shift();
console.log(result); // 1
console.log(arr); // [2, 3]

shift 메소드와 push 메소드를 사용하면 큐(선입선출)을 쉽게 구현 가능하다.

arry method

Array.prototype.concat (마지막 요소 추가 / newArr)

  • 인수로 전달된 값들(배열 또는 값)을 원본 배열(this)의 마지막 요소로 추가한 새로운 배열을 반환
  • 인수로 전달한 값이 배열인 경우, 배열을 해체하여 새로운 배열의 요소로 추가
  • 원본 배열은 변경되지 않는다.
  • pushunshift 메소드는 concat 메소드로 대체 가능
    • pushunshift 메소드: 원본 배열을 반드시 변수에 할당
    • concat 메소드: 반환값을 반드시 변수에 할당
1
2
3
4
5
const arr1 = [1, 2, 3];
const arr2 = [4, 5];

let result = arr1.concat(arr2);
console.log(result); // [1, 2, 3, 4, 5]

인수로 전달받은 값이 배열이면 인수로 전달받은 배열을 해체하여 새로운 배열의 마지막 요소로 추가한다.

1
2
3
4
5
6
7
8
9
// unshift, push
const arr = [1, 2, 3];
arr.push([4, 5]); // unshift도 해당
console.log(arr); // [1, 2, 3, [4, 5]]

// concat
let result = [1, 2, 3].concat([4, 5]);
result = result.concat([6, 7]);
console.log(result); // [1, 2, 3, 4, 5, 6, 7]

ES6 스프레드 문법으로 대체할 수 있다.

1
2
let result = [...[1, 2, 3], ...[4, 5]];
console.log(result);

Array.prototype.splice (중간 요소 추가 및 제거 / 매개변수 3)

  • 배열의 중간에 요소를 추가하거나 제거하는 경우 사용한다.
  • 원본 배열(this)을 직접 변경 하는 부수 효과가 있다.
  • 3개의 매개변수가 있다.
    • start: 원본 배열의 요소를 제거하기 시작할 인덱스. start만 있으면 start 이후로 모든 요소가 제거된다.
    • deleteCount: 제거할 요소의 개수. 0일 경우 아무런 요소도 제거되지 않음. 옵션.
    • items: 제거한 위치에 삽입될 요소들의 목록. 생략하면 제거만 한다. 옵션.
1
2
3
4
5
const animal = ['bunny', 'kitten', 'puppy'];
const result = animal.splice(1, 1, 'squirrel', 'hamster');

console.log(result); // ['kitten']
console.log(animal); // ['bunny', 'squirrel', 'hamster', 'puppy']

Array.prototype.slice (전달된 범위 요소 복사 / newArr / 매개변수 2)

  • 인수로 전달된 범위의 요소들을 복사하여 반환
  • 원본 배열은 변경되지 않는다.
  • 2개의 매개변수가 있다.
    • start: 복사를 시작할 인덱스. 음수일 경우 배열의 끝에서 시작.
    • end: 복사를 종료할 인덱스. 이 인덱스에 해당되는 요소는 복사되지 않음. 기본값은 length값. 생략하면 모든 요소를 복사하여 반환하게 된다. 옵션.
  • 모든 인수를 생략하면 원본 배열의 새로운 복사본 생성하여 반환하게 된다.
1
2
3
const animal = ['bunny', 'kitten', 'puppy'];
let result = animal.slice(0, 1);
console.log(result); // ['bunny']

arguments, HTMLCollection, NodeList와 같은 유사 배열 객체(Array-like Object)를 배열로 변환 가능하다.

ES6의 스프레드 문법을 사용하면 간단하게 유사배열객체를 배열로 변환 가능하다.

1
2
3
4
5
6
7
function plus(){
const arr = [...arguments];
console.log(arr); // [1, 2, 3]
return arr.reduce((first, second) => first + second, 0);
}

console.log(plus(1, 2, 3)); // 6

Array.prototype.indexOf

  • 원본 배열에서 인수로 전달된 요소를 검색하여 인덱스를 반환
    • 중복되는 요소가 존재하면 그중 첫번째 인덱스를 반환한다.
    • 해당하는 요소가 없으면 -1 반환
    • 두번째 인수는 검색을 시작할 인덱스이다.
  • 배열에 요소가 존재하는지 확인할 때 유용하게 사용할 수 있다.
  • 결과값 -1을 비교해보아야 하고 배열에 NaN을 확인할 수 없는 문제가 있다.
1
2
3
4
const animal = ['bunny', 'kitten', 'kitten'];
animal.indexOf('bunny'); // 0
animal.indexOf('puppy'); // -1
animal.indexOf('kitten', 2) // 2

ES7에서 새로 도입된 Array.prototype.includes 메소드를 사용하면 가독성이 좋다.

1
2
3
4
5
6
7
8
9
const animal = ['bunny', 'kitten'];

// animal 배열에 'puppy'가 있는지 확인
// 존재하지 않으면 'puppy'를 추가해라
if (!animal.includes('puppy')) {
animal.push('puppy');
}

console.log(animal); // ['bunny', 'kitten', 'puppy']

Array.prototype.join

  • 원본배열의 모든 요소를 문자열로 변환 후 인수로 전달 받은 값인 구분자로 연결한 문자열을 반환
  • 구분자는 생략 가능하며 기본 구분자는 , (쉼표) 이다.
1
2
3
4
5
6
7
const animal = ['bunny', 'kitten', 'puppy'];

let result = animal.join();
console.log(result); // bunny,kitten,puppy

result = animal.join(' - ');
console.log(result); // bunny - kitten - puppy

Array.prototype.reverse

  • 원본 배열의 요소 순서를 반대로 변경한다.
  • 원본 배열이 변경된다.
  • 반환값은 변경된 배열

Array.prototype.fill

  • 인수로 전달 받은 값을 요소로 배열의 처음부터 끝까지 채운다.
  • 원본 배열이 변경된다.
  • 두번째 인수로 요소 채우기를 시작할 인덱스를 설정할 수 있다.
  • 세번째 인수로 요소 채우기를 멈출 인덱스를 설정할 수 있다. 해당 인덱스는 포함되지 않는다.
  • 배열을 생성하면서 특정 값으로 요소를 채울 수 있다. (이때, 원본 배열까지도 변경시킨다.)
  • 모든 요소를 하나의 값으로만 채울 수 있다. Array.from을 사용하면 두번째 인수로 전달한 함수를 통해 값을 만들면서 요소를 채울 수 있다.
1
2
3
4
5
6
7
8
9
10
const animal = ['bunny', 'kitten', 'puppy', 'squirrel', 'hamster'];

animal.fill('bunny');
console.log(animal); // ['bunny', 'bunny', 'bunny', 'bunny', 'bunny']

animal.fill('bunny', 3);
console.log(animal); // ['bunny', 'kitten', 'puppy', 'bunny', 'bunny']

animal.fill('bunny', 2, 4);
console.log(animal); // ['bunny', 'kitten', 'bunny', 'bunny', 'hamster']

Array.prototype.includes

  • 배열 내에 특정 요소가 포함되어 있는지 확인하여 true 또는 false를 반환
  • 두번째 인수로 검색을 시작할 인덱스를 전달 가능
  • ES7에서 도입
1
2
3
4
5
6
7
8
9
10
11
12
const animal = ['bunny', 'kitten', 'puppy', 'squirrel', 'hamster'];

let result = animal.includes('bunny');
console.log(result); // true

result = animal.includes('lion');
console.log(result); // false

result = animal.includes('bunny', 2);
console.log(result); // false

console.log([NaN].includes(NaN)); // true

REFERENCE
https://poiemaweb.com

  • © 2020-2025 404 Not Found
  • Powered by Hexo Theme Ayer