Array 개체
JavaScript에는 명시적인 배열 자료형이 없습니다. 하지만 배열을 다루기 위해서 Array
개체와 그 개체의 메소드를 이용할 수 있습니다. Array
개체에는 다양한 방법으로 배열을 다루기 위한 메소드들이 있는데, 배열을 합치거나, 순서를 뒤집거나, 정렬하는 등의 작업을 할 수 있습니다. 배열 길이를 알 수 있는 속성과 정규 표현식에 사용할 수 있는 속성들이 있습니다.
배열
은 이름이나 색인으로 참조할 수 있는 값들을 모아놓은, 값의 순서가 유지되는 집합입니다. 예를 들어, 우리는 고용 번호로 색인된 고용인의 이름을 담고 있는 emp
라는 배열을 만들 수 있습니다. 이 때 emp[1]
는 1번 고용인, emp[2]
2번 고용인이 되는 것입니다.
배열 만들기
Array
개체는 이렇게 만들 수 있습니다.
1. arrayObjectName = new Array(element0, element1, ..., elementN) 2. arrayObjectName = new Array(arrayLength)
arrayObjectName
은 새 개체의 이름이거나 존재하는 다른 개체의 속성 이름입니다. Array
개체의 속성이나 메소드를 이용할 때는 arrayObjectName은 존재하는 Array
개체 이름이거나 존재하는 다른 개체의 속성입니다.
element0, element1, ..., elementN
는 배열의 원소(element)가 될 값들입니다. 이런 식으로 지정하면, 나열한 값들을 원소로 가지고, 길이는 값의 개수인 배열이 만들어집니다.
arrayLength
는 배열의 초기 길이입니다. 다음 코드는 원소 다섯 개를 가지는 배열을 만듭니다.
billingMethod = new Array(5)
배열 상수값 또한 Array
개체입니다. 예를 들어, 다음과 같은 상수값은 Array
개체입니다. 배열 상수값에 대한 자세한 내용은 배열 상수값을 보시기 바랍니다.
coffees = ["French Roast", "Columbian", "Kona"]
배열에 원소 넣기
원소에 값을 할당함으로써 배열에 값을 넣을 수 있습니다.
emp[1] = "Casey Jones" emp[2] = "Phil Lesh" emp[3] = "August West"
배열을 만들 때 값을 넣을 수도 있습니다.
myArray = new Array("Hello", myVar, 3.14159)
배열 원소 참조하기
배열 원소의 순서를 나타내는 숫자로 원소를 참조할 수 있습니다. 예를 들어 다음과 같은 배열을 만들었다고 해봅시다.
myArray = new Array("Wind","Rain","Fire")
그러면 첫 번째 원소는 myArray[0]
으로 참조할 수 있고, 두 번째 원소는 myArray[1]
로 참조할 수 있습니다.
원소의 색인은 영(0)부터 시작하지만 배열 길이(예를 들면 myArray.length
)는 배열의 원소 개수를 나타냅니다.
Array 개체의 메소드
Array
개체는 다음과 같은 메소드들을 가지고 있습니다.
concat
메소드는 두 배열을 합쳐서 새 배열 하나를 반환합니다.
myArray = new Array("1","2","3") myArray = myArray.concat("a", "b", "c"); // myArray는 ["1", "2", "3", "a", "b", "c"]이 되었습니다.
join(deliminator = ",")
메소드는 배열의 모든 원소를 문자열로 바꿔서 하나의 문자열을 만들어줍니다.
myArray = new Array("Wind","Rain","Fire") list = myArray.join(" - "); // list는 "Wind - Rain - Fire"입니다.
pop
메소드는 배열의 마지막 원소를 배열에서 제거하고 그 원소를 반환합니다.
myArray = new Array("1", "2", "3"); last=myArray.pop(); // MyArray는 ["1", "2"], last = "3"이 되었습니다.
push
메소드는 하나 또는 그 이상의 원소를 배열 끝에 추가하고, 추가된 마지막 원소를 반환합니다.
myArray = new Array("1", "2"); myArray.push("3"); // MyArray는 ["1", "2", "3"]이 되었습니다.
reverse
메소드는 원소의 순서를 뒤집어서 첫 번째 원소가 마지막 원소가 되고, 마지막 원소가 첫 번째 원소가 되도록 합니다.
myArray = new Array ("1", "2", "3"); myArray.reverse(); // myArray = [ "3", "2", "1" ]이 되었습니다.
shift
메소드는 첫 번째 요소를 배열에서 제거하고, 그 원소를 반환합니다.
myArray = new Array ("1", "2", "3"); first=myArray.shift(); // MyArray는 ["2", "3"], first는 "1"이 되었습니다.
slice (start_index, upto_index)
메소드는 배열의 일부분을 추출하여 새 배열을 반환합니다.
myArray = new Array ("a", "b", "c", "d", "e"); myArray = myArray.slice(1,4); //색인 1부터 색인 4 바로 앞까지의 원소를 추출해서 [ "b", "c", "d" ]를 반환합니다.
splice(index, count_to_remove, addelement1, addelement2, ...)
메소드는 배열에 원소를 추가하거나 배열에서 원소를 제거합니다.
myArray = new Array ("1", "2", "3", "4", "5"); myArray.splice(1,3,"a","b","c", "d"); // MyArray는 ["1", "a", "b", "c", "d", "5"]가 되었습니다. // 이 코드는 색인 1(즉 "2")부터 원소 세 개를 제거하고, 그 자리에 원소를 추가합니다.
sort
메소드는 원소를 정렬합니다.
myArray = new Array("Wind","Rain","Fire") myArray.sort(); // 배열을 정렬했으므로 myArrray = [ "Fire", "Rain", "Wind" ]가 되었습니다.
sort
메소드에 배열을 어떻게 정렬할지 결정하는 콜백 함수를 전해줄 수 있습니다. 그 함수는 두 값을 비교해서 다음 셋 중 하나를 반환해야 합니다.
- 정렬할 때 a가 b보다 작다면 -1(또는 임의의 음수)를 반환
- 정렬할 때 a가 b보다 크다면 1(또는 임의의 양수)를 반환
- a와 b가 같으면 0을 반환
예를 들어 다음 코드는 원소의 마지막 글자를 기준으로 배열을 정렬합니다.
var sortFn = function(a,b){ if (a[a.length - 1] < b[b.length - 1]) return -1; if (a[a.length - 1] > b[b.length - 1]) return 1; if (a[a.length - 1] == b[b.length - 1]) return 0; } myArray.sort(sortFn); // 배열을 정렬했으므로 myArray = ["Wind","Fire","Rain"]가 되었습니다.
unshift
메소드는 하나 또는 그 이상의 원소를 배열 앞에 추가하고 배열의 새 길이를 반환합니다.
2차원 배열
다음 코드는 2차원 배열을 만듭니다.
a = new Array(4) for (i=0; i < 4; i++) { a[i] = new Array(4) for (j=0; j < 4; j++) { a[i][j] = "["+i+","+j+"]" } }
바로 위 코드는 이런 배열을 만들어냅니다.
Row 0:[0,0][0,1][0,2][0,3] Row 1:[1,0][1,1][1,2][1,3] Row 2:[2,0][2,1][2,2][2,3] Row 3:[3,0][3,1][3,2][3,3]
배열과 정규 표현식
배열이 정규 표현식과 문자열을 매치한 결과로 생성되었을 때, 그 배열은 매치에 대한 정보를 제공하는 속성과 원소를 포함하고 있습니다. RegExp.exec
, String.match
, String.split
의 반환 값은 배열입니다. 정규 표현식과 관련된 배열 사용에 대한 정보를 얻으려면 4장 정규 표현식을 보십시오.