1. 배열 요소의 추가와 삭제
1.1 배열 요소의 추가
- 객체가 동적으로 프로퍼티를 추가할 수 있는 것처럼 뱅려도 동적으로 요소를 추가할 수 있다. 이때 순서에 맞게 값을 할당할 필요는 없고 인덱스를 사용하여 필요한 위치에 값을 할당한다.

1.2 배열 요소의 삭제
- 배열은 객체이기 때문에 배열의 요소를 삭제하기 위해 delete 연산자를 사용할 수 있다. 이때 length에는 변함이 없다.

2. 배열의 순회
- 객체의 프로퍼티를 순회할 때 for...in 문을 사용한다. 배열 역시 객체이므로 for...in 문을 사용할 수 있다. 그러나 배열은 객체이기 때문에 프로퍼티를 가질 수 없다. for...in 문을 사용하면 배열 요소뿐만 아니라 불필요한 프로퍼티까지 출력될 수 있고 요소들의 순서를 보장하지 않으므로 배열을 순회하는데 적합하지 않다.
- 배열의 순회에는 forEach 메소드, for 문, for...of 문을 사용하는 것이 좋다.

3. Array Method
3.1 Array.isArray(arg:any):boolean
- 정적 메소드 Array.isArray는 주어진 인수가 배열이면 true, 배열이 아니면 false를 반환한다.
3.2 Array.from
- 유사 배열 객체 또는 이터러블 객체를 변환하여 새로운 배열을 생성한다.

3.3 Array.of
- 전달된 인수를 요소로 갖는 배열을 생성한다.
- Array.of는 Array 생성자 함수와 다르게 전달된 인수가 1개이고 숫자이더라도 인수를 요소로 갖는 배열을 생성한다.

3.4 Array.prototype.indexOf(searchElement: T, fromIndex?: number): number
- 원본 배열에서 인수로 전달된 요소를 검색하여 인덱스를 반환한다.
- 중복되는 요소가 있는 경우, 첫번째 인덱스를 반환한다.
- 해당하는 요소가 없는 경우, -1을 반환한다.

3.5 Array.prototype.concat(…items: Array<T[] | T>): T[]
- 인수로 전달된 값들(배열 또는 값)을 원본 배열의 마지막 요소로 추가한 새로운 배열을 반환한다.
- 인수로 전달한 값이 배열인 경우, 배열을 해체하여 새로운 배열의 요소로 추가한다. 원본 배열은 변경되지 않는다.

3.6 Array.prototype.join(separator?:string):string
- 원본 배열의 모든 요소를 문자열로 변환한 후, 인수로 전달받은 값, 즉 구분자(separator)로 연결한 문자열을 반환한다.
구분자는 생략가능하며 기본 구분자는 , 이다.

3.7 Array.prototype.push(…items: T[]):number
- 인수로 전달받은 모든 값을 원본 배열의 마지막에 요소로 추가하고 변경된 length 값을 반환한다.
- push 메소드는 원본 배열을 직접 변경한다.
- push 메소드는 원본 배열을 직접 변경하지만 concat 메소드는 원본 배열을 변경하지 않고 새로운 배열을 반환한다.

- 인수로 전달받은 값이 배열인 경우, push 메소드는 배열을 그대로 원본 배열의 마지막 요소로 추가하지만
concat 메소드는 배열을 해체하여 새로운 배열의 마지막 요소로 추가한다.

- push 메소드는 성능면에서 좋지 않다. push 메소드는 배열의 마지막에 요소를 추가하므로 length 프로퍼티를 사용하여 직접 요소를 추가할 수도 있다. 이 방법이 push 메소드보다 빠르다.
3.8 Array.prototype.pop():T | undefined
- 원본 배열에서 마지막 요소를 제거하고 제거한 요소를 반환한다. 원본 배열이 빈 배열이면 undefined를 반환한다.
- pop 메소드는 원본 배열을 직접 변경한다.
스택(stack)은 데이터를 마지막에 밀어 놓고, 마지막에 밀어 넣은 데이터를 먼저 꺼내는 후입 선출(LIFO - Last In First Out) 방식의 자료 구조이다. 스택은 언제나 가장 마지막에 밀어 넣은 최신 데이터를 취득한다.
3.9 Array.prototype.reverse():this
- 배열 요소의 순서를 반대로 변경한다. 이때 원본 배열이 변경된다. 반환값은 변경된 배열이다.

3.10 Array.prototype.shift():T | undefined
- 배열의 첫요소를 제거하고 제거한 요소를 반환한다. 만약 빈 배열일 경우 undefined를 반환한다.
- shift 메소드는 대상 배열 자체를 변경한다.
- shift는 push와 함께 배열을 큐(FIFO:First In First Out)처럼 동작하게 한다.


3.11 Array.prototype.slice(start=0, end=this.length): T[]
- 인자로 지정된 배열의 부분을 복사하여 반환한다.
- 첫번째 매개변수 start에 해당하는 인덱스를 갖는 요소부터 매개변수 end에 해당하는 인덱스를 가진 요소 전까지 복사된다.
- start : 복사를 시작할 인덱스. 음수인 경우 배열의 끝에서의 인덱스를 나타낸다. 예를들어 slice(-2)는 배열의 마지막 2개의 요소를 반환한다.
- end : 옵션이며 기본값은 length 값이다.

- slice 메소드에 인자를 전달하지 않으면 원본 배열의 복사본을 생성하여 반환한다.

3.12 Array.prototype.splice(start: number, deleteCount=this.length-start, …items: T[]): T[]
- 기존의 배열의 요소를 제거하고 그 위치에 새로운 요소를 추가한다. 배열 중간에 새로운 요소를 추가할 때도 사용된다.
- start: 배열에서의 시작 위치이다. start만을 지정하면 배열의 start부터 모든 요소를 제거한다.
- deleteCount: 시작 위치부터 제거할 요소의 수이다. deleteCount가 0인 경우, 아무런 요소도 제거되지 않는다.
- items: 삭제한 위치에 추가될 요소들이다. 만약 아무런 요소도 지정하지 않을 경우, 삭제만 한다.
- 반환값 삭제한 요소들을 가진 배열이다.

slice는 배열의 일부분을 복사해서 반환하며 원본을 훼손하지 않는다.
splice는 배열에서 요소를 제거하고 제거한 위치에 다른 요소를 추가하며 원본을 훼손한다.
'JavaScript' 카테고리의 다른 글
| [PoiemaWeb] String 레퍼 객체 (0) | 2023.03.22 |
|---|---|
| [PoiemaWeb] Date 객체 (0) | 2023.03.22 |
| [PoiemaWeb] Math (0) | 2023.03.22 |
| [PoiemaWeb] 클로저 (0) | 2023.03.21 |
| [PoiemaWeb] this (0) | 2023.03.15 |