배열에 대하여(Array)
- Nest
- Development
- Category
- Javascript
- Hit
- 606
- Star
- 0
- 배열은 순서있는 값들의 집합이다.
- 배열 안의 각각 값을 원소라고 하며, 각 원소는 배열 안에서 그 위치를 가리키는 인덱스(Index)라는 번호를 할당받게 된다.
- 각 원소는 서로 다른 타입의 원소가 들어갈 수 있다. 엄격한 데이터타입의 프로그래밍 언어에서는 그렇지 않다.
var empty = []; // 빈 배열
var primes = [2, 3, 4, 7, 11]; // 5개의 숫자 값들로 이루어진 배열
var misc = [1.1, true, "a", ]; // 서로 다른 타입을 가진 3개의 원소로 이루어진 배열
배열 리터럴에서는 임의의 표현식도 사용할 수 있다.
var base = 1024;
var table = [base, base+1, base*2, base/3];
배열 리터럴은 객체 리터럴이나 또 다른 배열 리터럴을 포함할 수 있다.
var b = [[1, {x:1, y:2}], [2, {x:3, y:4}]];
배열을 생성하는 또 다른 방법은 Array() 생성자를 사용하는 것이다.
// 전달인자 겂이 호출하는 방법
var a = new Array(); // 아무 원소도 없는 빈 배열을 생성한다.
명시적으로 원소를 정의하여 호출하는 방법
var a = new Array(5, 4, 3, 2, 1, "testing, test");
배열의 길이를 지정하는 숫자값을 전달인자로 호출하는 방법
var a = new Array(10); // 원소의 값이 undefined가 10개가 들어가있다.
Array()
생성자로 사용하는것보다 배열 리터럴로 사용는것이 문장이 더 간결해지도 수월하다.
배열원소 읽고,쓰기
배열의 각 원소에 접근할 때에는 [] 연산자를 사용한다.
value = a[0];
a[1] = 3.14;
i = 2;
a[i] = 3;
a[i+1] = "hello";
a[a[i]] = a[0];
자바스크립트의 인덱스 번호는 0번부터 시작한다.
배열의 인덱스는 정수를 사용해야하며, 너무 큰 수나 음의정수, 부동소수점값, 불리언값과같은 객체같은 다른값을 인덱스로 사용하려면 문자열로 변환하고 이 문자는 객체의 프로퍼티 이름으로 간주한다.
배열에 새로운 원소 추가하기
- C나 자바는 원소의 개수를 생성당시 지정되고 개수가 변하지 않지만 자바스크립트는 임의의 개수의 원소를 가질 수 있으며, 언제든지 개수 변경이 가능하다.
- 배열에 새로운 원소를 추가하려면 그 값을 할당하기만 하면 된다.
a[10] = 10;
- 배열의 인덱스는 연속되지 않아도 된다. 0번 인덱스와 10,000번 인덱스에 값을 할당할 경우에 0번과 10,000번에 메모리를 할당하지만 그 사이에 있는 인덱스에는 메모리를 할당하지 않는다.
a[0] = 1;
a[10000] = 10000;
배열원소 삭제하기
- 배열 원소를 삭제하려면 delete연산자를 사용하며 delete연산자를 사용하면 원소의 값이 undefined값으로 바뀐다. 하지만 원소 그 자체는 사라지지 않는다.
- 배열 원소를 배열에서 완전히 삭제하고, 삭제한 원소의 뒤쪽에 위치한 원소들을 앞쪽으로 옮겨서 저장하려면 배열 메서드를 사용해야한다.
Array.shift()
메서드는 배열의 첫번째 원소를 삭제하고,Array.pop()
메서드는 배열의 마지막 원소를 삭제하며,Array.splice()
메서드는 연속된 범위 안의 원소들을 일괄적으로 삭제한다.
배열의 길이
배열의 수를 알려주기위한 length라는 프로퍼티로 배열의 길이를 유추해낼 수 있다. length프로퍼티는 배열 안에서 가장 큰 인덱스값보다 하나 더 큰 값을 가지고 있다.
length 프로퍼티는 새로운 원소가 추가될때마다 자동으로 갱신된다.
var a = new Array(); // a.length == 0 (아무런 원소도 정의되지 않았다.)
a = new Array(10); // a.length == 10 (빈 원소가 0부터 9까지 정의된다.)
a = new Array(1,2,3); // a.length == 3 (원소가 0부터 2까지 정의된다.)
a = [4, 5]; // a.length == 2 (원소가 0, 1번이 정의된다.)
a[5] = -1; // a.length == 6 (원소 0, 1, 5번이 정의된다. 2, 3, 4번은 빈원소가 정의된다.)
배열 순회하기
length 프로퍼티의 가장 일반적인 용도는 배열의 모든 원소를 순회하는 작업에 쓰일 것이다.
var fruits = ["mango", "banana", "cherry", "pear"];
for (var i=0; fruits.length>i; i++) {
alert(fruits[i]);
}
배열의 순회는 배열안의 0번 인덱스에서 시작하여 연속적으로 나열되어 있다고 가정한다. 중간에 값이빠진 원소가 있을수도 있으니 if
문으로 검사를 할 수 있다.
for (var i=0; fruits.length>i; i++) {
if (fruits[i]) alert(fruits[i]);
}
루프구문은 배열의 원소를 초기화하는데에도 사용할 수 있다.
var lookup_table = new Array(1024);
for (var i=0; lookup_table.length>i; i++) {
lookup_table[i] = i * 512;
}
다차원 배열
자바스크립트는 완전히 다차원배열을 사용하지않지만 []연산자를 중첨해서 사용하면 다차원 배열을 흉내낼 수 있다.
var table = new Array(10); // 구구단의 10개의 행
for (var i=0; table.length>i; i++) {
table[i] = new Array(10); // 각 행에는 10개의 열이 있다.
}
// 배열을 초기화한다.
for (var row=0; table.length>row; row++) {
for (col=0; table[row].length>col; col++) {
table[row][col] = row * col;
}
}
Array.map() 메서드에서 continue 같은 기능을 사용하기
Array.map()
메서드에서는 continue
를 사용할 수 없고 사용할 수 있는 방법이 없다.
그래서 앞에 Array.filter()
메서드를 붙여서 먼저 요소를 빼두는것을 추천한다.
let obj = [1,2,3,4,5].filter((o) => {
if (o === 1 || o === 3 || o === 5)
{
return true;
}
else
{
return false; // skip
}
}).map((o) => {
return o;
});
// result: [1,3,5]