27장: 배열

배열

  • 여러 개의 값을 순차적으로 나열한 자료구조

배열 메서드

Array.isArray
Array.prototype.indexOf 
Array.prototype.push
Array.prototype.pop
Array.prototype.unshift
Array.prototype.shift
Array.prototype.concat
Array.prototype.splice
Array.prototype.slice
Array.prototype.join
Array.prototype.reverse
Array.prototype.fill
Array.prototype.includes
Array.prototype.flat
  • 자바스크립트에 배열이라는 타입은 존재하지 않는다. 배열은 객체타입이다. 그러나...

    • 일반 객체보다 인덱스로 값 삽입시 성능 테스트 약 2배 정도 빠르다 (27-11arrow-up-right)

    • 배열 인덱스에 정수 아닌 값을 사용할 경우, 요소가 생성되는것이 아니라 프로퍼티가 생성된다.

  • 자바스크립트는 밀집 배열 (dense)이 아닌, 희소 배열 (sparse) 사용한다.

    • 자바스크립트 배열은 해시 테이블로 구현된 객체

    • 희소 배열

      • 요소를 위한 각각의 메모리 공간은 동일한 크기를 갖지 않아도 되며, 요소가 연속적이지 않은 배열

      • 장점

        • 삽입 또는 삭제 빠르다

      • 단점

        • 일반 배열보다 원소까지 접근이 느리다

      • Length 와 배열요소의 개수가 일치하지 않는다

    • 참고

      일반적인 배열보다 요소 접근이 느린 단점을 보완하기 위해, 모던 JS 엔진은 배열을 일반 객체와 구별하여 좀 더 배열처럼 동작하도록 만든 것이다.

      희소배열은 연속적인 값의 집합이라는 배열의 기본적인 개념과 맞지 않으며, 성능에도 좋지 않은 영향을 준다. 최적화가 잘 되어있는 모던 자바스크립트 엔진은 요소의 타입이 일치하는 배열을 생성할때 일반적인 의미의 배열처럼 연속된 메모리 공간을 확보하는것으로 알려져있다.

      @@ 희소배열일때도 있고 일반 배열 일때도 있다는 건가!?

  • Accessor vs Mutator Method (27-41arrow-up-right)

    • Accessor 예

      • concat

        • 원본배열 직접변경하지않고 새로운 배열을 생성하여 반환

    • Mutator (직접 변경) 예

      • push

    • 원본 배열 직접 변경은 사용시 주의해야 될때가 있어, 가급적 Accessor 사용하자

    • push 메서드 보단 ES6의 스프레드 문법 사용하기

  • delete vs splice

    • 요소를 빈공간으로 놔둘건지 아니면, 완전 지울건지에 따라

  • 배열 순회는 for in 보다는 forEach 메소드, for 문, for…of 문을 사용하자.

  • indexOf 보다 ES7에서 새롭게 도입된 includes 메소드를 사용하면 보다 가독성이 좋다.

    • 또한, indexOf와 다르게, NaN이 포함되어 있는지 알 수 있음

  • push 대신 concat 사용 시 배열을 해체하여 처리 (27-59arrow-up-right)

  • push 보다는 length 프로퍼티를 사용하여 직접 요소를 추가가 더 빠르다

  • push 메소드보다는 ES6의 spread 문법을 사용하는 편이 좋다

  • ES6의 스프레드 문법

  • push 메서드 보단 ES6의 스프레드 문법 사용하기

  • unshift 메서드보다는 ES6의 스프레드 문법 사용하기

  • 깊은 복사를 위해서는 Lodash 라이브러리의 cloneDeep 메서드를 사용하는것을 추천한다.

    • 깊은 복사는 객체에 중첩되어있는 객체까지 모두 복사하는것

배열 고차 함수

  • 고차함수 = 함수를 인수로 전달받거나 함수를 반환하는 함수

Sort

커스텀 sort 기능

Filter

Reduce

reduce 로 진짜 구현 할수 있는게 많다

과일 별 개수를 세어보자

Flat 해보자

Some

Every

find

findIndex

Map

flatMap

Last updated