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-11)
배열 인덱스에 정수 아닌 값을 사용할 경우, 요소가 생성되는것이 아니라 프로퍼티가 생성된다.
자바스크립트는
밀집 배열 (dense)이 아닌,희소 배열 (sparse)사용한다.자바스크립트 배열은 해시 테이블로 구현된 객체
희소 배열
요소를 위한 각각의 메모리 공간은 동일한 크기를 갖지 않아도 되며, 요소가 연속적이지 않은 배열
장점
삽입 또는 삭제 빠르다
단점
일반 배열보다 원소까지 접근이 느리다
Length 와 배열요소의 개수가 일치하지 않는다
참고
일반적인 배열보다 요소 접근이 느린 단점을 보완하기 위해, 모던 JS 엔진은 배열을 일반 객체와 구별하여 좀 더 배열처럼 동작하도록 만든 것이다.
희소배열은 연속적인 값의 집합이라는 배열의 기본적인 개념과 맞지 않으며, 성능에도 좋지 않은 영향을 준다. 최적화가 잘 되어있는 모던 자바스크립트 엔진은 요소의 타입이 일치하는 배열을 생성할때 일반적인 의미의 배열처럼 연속된 메모리 공간을 확보하는것으로 알려져있다.
@@ 희소배열일때도 있고 일반 배열 일때도 있다는 건가!?
Accessor vs Mutator Method (27-41)
Accessor 예
concat
원본배열 직접변경하지않고 새로운 배열을 생성하여 반환
Mutator (직접 변경) 예
push
원본 배열 직접 변경은 사용시 주의해야 될때가 있어, 가급적 Accessor 사용하자
push 메서드 보단 ES6의 스프레드 문법 사용하기
deletevssplice요소를 빈공간으로 놔둘건지 아니면, 완전 지울건지에 따라
배열 순회는
for in보다는forEach메소드,for 문,for…of문을 사용하자.in은 객체의 반복에서 사용
indexOf보다 ES7에서 새롭게 도입된includes메소드를 사용하면 보다 가독성이 좋다.또한, indexOf와 다르게, NaN이 포함되어 있는지 알 수 있음
push 대신 concat 사용 시 배열을 해체하여 처리 (27-59)
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