본문 바로가기

programming study/JavaScript

27장. 배열(2)

본 내용은 모던 자바스크립트 Deep Dive - 자바스크립트의 기본 개념과 동작 원리를 토대로 작성하였습니다.

27.5 배열 요소의 참조

  • 참조할 때에는 대괄호 표기법([]) 사용
    • 대괄호 안에는 인덱스
    • 정수로 평가되는 표현식 사용 가능
    • 요소가 존재하지 않으면 undefined

27.6 배열 요소의 추가와 갱신

  • 배열에 요소를 동적으로 추가 가능
  • 존재하지 않는 인덱스를 사용해 값 할당 가능
  • length 프로퍼티는 자동 갱신
  • legnth 프로퍼티보다 큰 인덱스에 할당 시에는 희소 배열이 됨

27.7 배열 요소의 삭제

  • 배열도 객체이므로 delete 연산을 사용하여 특정 요소 삭제 가능
    • length 프로퍼티에 영향을 주지 않음
    • 희소배열이 되므로 사용하지 않는 것이 좋음
  • splice 메서드를 사용할 것을 권장

27.8 배열 메서드

  • 자바스크립트에서는 다양한 배열 빌트인 메서드를 제공
  • 패턴은 두 가지
    • mutator method : 원본 배열을 직접 변경하는 메서드
    • accessor method : 새로운 배열을 생성하여 반환하는 메서드
  • ES5 이전의 초장기 배열 메서드는 원본 배열을 직접 변경하는 경우가 많음
  • 원본 배열을 직접 변경하지 않는 메서드를 사용하는 것을 권장

27.8.2 Array.prototype.indexOf

  • 인수로 전달된 요소를 검색하여 인덱스 반환
  • 전달 받은 요소가 없는 경우, -1로 반환
  • 배열에 특정 요소의 유무를 확일할 때 유용
  • NaN을 포함하는지 확인할 수 없음
  • ES7의 Array.prototype.includes 메서드가 가독성이 더 좋음
const cats = ['siru', 'nunu', 'mango', 'meonji'];
​
cats.indexOf('siru'); // 0
​
cats.indexOf('nunu'); // 1
​
cats.indexOf('mango'); // 2
​
cats.indexOf('meonji'); // 3
​
cats.indexOf('boksili'); // -1

27.8.3 Array.prototype.push

  • 인수로 전달받은 모든 값을 원본 배열의 마지막 요소로 추가하고 변경된 length 프로퍼티 값을 반환
  • 원본 배열을 직접 변경
  • 성능 면에서 좋지 않음
  • length 프로퍼티를 활용하여 마지막 요소를 직접 추가할 수 있음
    • 더 빠름
  • 원본을 변경하기 때문에 ES6의 스프레드 문법을 활용하는 것이 좋음
const cats = ['siru', 'nunu', 'mango', 'meonji'];
​
// push 메서드
cats.push('boksili');
​
// lengh 메서드를 사용한 요소 추가
cats[cats.length] = 'bocksili';
​
// ES6 스프레드 문법
const newCats = [...cats, 'bocksili'];

27.8.4 Array.prototype.pop

  • 원본 배열에서 마지막 요소를 제거하고 제거한 요소 반환
  • 빈 배열이면 undefined를 반환
  • 원본 배열을 직접 변경
  • push와 pop을 사용하여 스택을 구현할 수 있음
    • 후입 선출의 자료구조(LIFO)
const cats = ['siru', 'nunu', 'mango', 'meonji'];
​
cats.pop(); // meonji

27.8.5 Array.prototype.unshift

  • 윈수로 전달 받은 모든 값을 원본 배열의 선두에 요소로 추가하고 length 프로퍼티 반환
  • 원본 배열을 직접 변경
  • 스프레드 문법을 사용하는 것을 권장
const cats = ['siru', 'nunu', 'mango'];
​
// unshift 메서드
cats.unshift('meonji');
​
// ES6 스프레드 문법
const newCats = ['meonji', ...cats];

27.8.6 Array.prototype.shift

  • 원본 배열에서 첫 번째 요소를 제거하고 제거한 요소를 반환
  • 원본이 빈 배열이면 undefined를 반환
  • 원본 배열 직접 변경
  • shift와 push 메서드를 사용하여 큐를 쉽게 구현 가능
    • 선입선출(FIFO)의 자료구조
const cats = ['siru', 'nunu', 'mango'];
​
cats.shift();

27.8.7 Array.prototype.concat

  • 인수로 전달된 값을 원본 배열의 마지막 요소로 추가한 새로운 배열을 반환
  • 원본 배열은 변경되지 않음
  • 인수로 전달한 값이 배열의 경우 배열을 해체하여 추가
  • push, unshift 메서드를 대체 가능
  • push/unshift/concat 메서드를 사용하는 대신, 스프레드 문법 사용 권장
const cats = ['siru', 'nunu'];
​
const newCats = cats.concat('mango', 'meonji');

27.8.8 Array.prototype.splice

  • 원본 배열의 중간에 요소 추가 또는 제거시 사용
  • 3개의 매개변수가 있음
    • start : 시작 인덱스
    • deleteCount :시작 인덱스로부터 제거할 요소의 개수. 생략할 경우, 삭제하지 않음
    • mites: 제거한 위치에 삽입할 요소들의 목록
  • 원본 배열을 직접 변경
const cats = ['siru', 'nunu'];
​
cats.splice(1, 1, 'mango', 'meonji'); // [ 'siru', 'mango', 'meonji' ]

27.8.9 Array.prototype.slice

  • 인수로 전달된 범위의 요소들을 복사하여 배열로 반환
  • 원본 배열을 변경시키지 않음
  • 두 개의 매개변수를 가짐
    • start: 복사를 시작할 인덱스, 음수의 경우 배열의 끝부터 요소를 복사
    • end: 복사를 종료할 인덱스, 생략할 시 기본값은 length 프로퍼티
const cats = ['siru', 'nunu', 'meonji', 'boksili'];
​
cats.splice(0, 2); // ['siru', 'nunu'];

27.8.10 Array.prototype.join

  • 배열의 모든 요소를 문자열로 변환
  • 전달받은 인수를 구분자로서 사용
  • 구분자는 생략 가능, 기본 값은 콤마(,)
const cats = ['siru', 'nunu', 'mango', 'meonji'];
​
cats.join(); // 'siru, nunu, mango, meonji'

27.8.11 Array.prototype.reverse

  • 원본 배열의 순서를 반대로 뒤집음
  • 원본 배열은 변경
  • 변경된 배열을 반환
const cats = ['siru', 'nunu', 'mango', 'meonji'];
const reversCats = cats.reverse(); // ['meonji', 'mango', 'nunu', 'siru']

27.8.12 Array.prototpye.fill

  • 인수로 전달 받은 값을 배열의 처음부터 끝까지 요소로 채움
  • 원본 배열 변경
  • 두 번째 인수로 시작할 인덱스 지정
  • 세 번째 인수로 멈출 인덱스 지정
const cats = ['siru', 'nunu', 'mango', 'meonji'];
​
cats.fill('siru');
​
console.log(cats); // ['siru', 'siru', 'siru', 'siru'];

27.8.13 Array.prototype.includes

  • 배열 내에 특정 요소가 포함되어 있는지 확인하여 불린으로 반환
  • 두번 째 인수로 검색을 시작할 인덱스를 전달할 수 있음

27.8.14 Array.prototype.flat

  • ES10에 추가
  • 인수로 전달한 깊이만큼 배열 평탄화
const cats = ['siru', ['nunu', ['mango']]];
​
cats.flat(3); //[ 'siru', 'nunu', 'mango'];

'programming study > JavaScript' 카테고리의 다른 글

27장. 배열(4)  (0) 2022.04.18
27장. 배열(3)  (0) 2022.04.17
27장. 배열(1)  (0) 2022.04.14
26장. ES6 함수의 추가 기능(3)  (0) 2022.04.13
26장. ES6 함수의 추가 기능(2)  (0) 2022.04.12