배열

배열은 메모리 상에 연속적으로 배치되고 인덱스를 통해 데이터에 접근이 가능하다.

선언

배열의 선언은 두 가지 방식으로 가능하다.

var a = [1, 2, 3, "hello", null, true, []]; // array literalvar a = new Array(1, 2, 3, "hello", null, true, []);  // array instantiation

조금 생소하긴 하지만 배열 원소는 여러가지 타입이 가능하다.

메서드

배열 크기를 초과한 인덱스에 데이터를 할당하면 해당 인덱스까지 배열의 크기가 증가한다. 자바스크립트의 배열은 "동적 배열" 특징을 가지고 있다.

var a = [1, 2, 3];
​
a[1000] = 4;  // 불안정한 삽입 방법// [ 4, <999 empty items>, 3 ]

배열 뒤쪽의 원소 삽입/삭제는 push()/pop() 메서드를 이용한다. 앞쪽의 삽입/삭제는 unshift()/shift() 를 이용한다.

var a = [1, 2, 3];
​
a.push(4);  // 삽입// [ 1, 2, 3, 4 ]
​
a.pop();    // 삭제// [ 1, 2, 3 ]var b = [2, 3];
​
b.unshift(1); // 삽입// [1, 2, 3]
​
b.shift() // 삭제// [2, 3]

그 밖에도 유용한 메서드를 제공한다.

[111, 222, 333].indexOf(222) // 배열 원소의 인덱스 탐색// 1[1,2,3,4].join(); // 배열의 원소를 하나의 문자열로 변환// "1,2,3,4"[1,2,3,4].concat(2,3);  // 기존 배열에 입력받은 배열을 추가하여 새로운 배열 구성
                        // 기존 배열은 변경되지 않는다.// [1,2,3,4,2,3]var pos = 1, n = 2;
[1,2,3,4].slice(pos, n);  // pos 인덱스부터 n개 삭제하여 새로운 배열 재구성// [1, 4][1,2,3,4].slice() // 사본// [1,2,3,4]

탐색

배열은 for 문을 이용할 수 도 있지만, forEach() 메서드를 이용하면 안정성, 가독성을 높일 수 있다. 배열은 iterable 한 Iterator 이므로 foreach, map, filter 를 지원하고 매개변수로 일급 함수를 취급하여 함수형 프로그래밍을 지원한다.

[1, 2, 3].forEach(function(value, index, object) {  console.log(value); });// [1, 2, 3]var ret = [1, 2, 3].map(function(value, index, object) { return value + 2; });// [3, 4, 5]var ret = [1, 2, 3].filter(function(value, index, object) { return value % 2 == 1; });// [1, 3]var ret = [1, 2, 3].reduce(function(accumulator, value, index, object) {  return accumulator + value; }, 1);// 7