JavaScript Array
Javascript의 배열
- 정렬된 값의 집합
- 타입이 고정되어 있지 않음
- 배열이 밀집도가 높지 않음
- 원소의 index가 연속적이지 않아도 됨
- 원소 사이에 빈자리가 있어도 됨
- Array.prototype의 프로퍼티를 상속받음.
배열 생성
- 배열 리터럴
- Array 생성자
배열 리터럴
var empty = [];
var primes = [2,3,5,7,11];
var misc = [ 1.1, true, "a" ];
// 임의의 표현식도 사용 가능
var base = 1024;
var table = [base, base+1, base+2, base+3];
var count = [1,,3]; // 가운데 값은 undefined
var undefs = [,,]; // 원소는 2개 (마지막원소에 , 가능)
Array 생성자
var a = new Array();
var aa = new Array(10); // length
var aaa = new Array(5,4,3,2,1, "testing, testing"); // 인자값이 배열의 원소
console.log(aaa)
Output :
다양한 Index
// 다양한 인덱스
a[-1.23] = true;
a["1000"] = 0;
a[1.000] = 7;
console.log(a)
Output :
희소배열
배열에 속한 원소의 위치가 연속적이지 않은 배열
원소가 undefined가 아니라 아예 없는 것
arr = new Array(5); // 원소는 없지만 a.length의 값은 5
arr2 = [] // length값이 0인 빈 배열
arr3[1000] = 1; // 하나의 원소 할당, 길이는 1000
배열의 길이
배열의 length Property : 배열의 원소 개수, 배열의 가장 큰 인덱스+1
length 값 변경 :
a = [1,2,3,4,5];
a.length = 3; // 결과가 1,2,3이 된다.
a.length = 0; // 결과 []
a.length = 5; // new Array(5)와 같은 결과
length Property 읽기전용으로 만들기 :
a = [1,2,3];
Object.defineProperty(a, "length", {writeable: false});
a.length = 0; // 값 바꿔도 배열은 변하지 않음
배열 원소 추가 제거
a = [];
a[0] = "zero";
a.push("one");
a.push("two", "three");
console.log(a.length);
delete a[1];
console.log(1 in a); // false -> 지워졌다.
console.log(a.length);
Output :
배열 순회하기
var o = new Array(7,5,3,2);
var keys = Object.keys(o);
var values = [];
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
values[i] = o[key];
}
console.log(o);
console.log(keys);
console.log(values);
for(var i = 0, len = keys.length; i < len; ++i) {
// 성능향상 위해 length를 한번만 불러오기
}
Output :
루프 돌릴 때 고려해야 할 점
- 원소가 null / undefined 일 때 어떻게 처리할 지
- 상속받은 Property 등의 고유 Property 가 아닌 값들을 어떻게 처리할 지
for in loop에서 원소 반환 순서
- 정해져있지 않음.
- 순서가 중요한 알고리즘에서는 for문을 통해 명시적으로 사용할 것을 권장
다차원 배열
var table = new Array(10);
for(var i = 0; i < table.length; ++i) {
table[i] = new Array(10);
}
for(var i = 0; i < table.length; ++i) {
for(var j = 0; j < table[i].length; ++j) {
table[i][j] = i*j;
}
}
console.log(table[5][7]);
Output :
배열 메서드
join()
* 배열의 모든 원소를 문자열로 변환, 변환한 문자를 이어붙인 결과를 return
* seperator를 지정하지않으면 , 가 기본 separator
* String.split() -> join의 반대. 문자열을 배열로
var a = [1, 2, 3];
console.log(a.join());
console.log(a.join(' '));
console.log(a.join(''));
Output :
reverse()
- 배열의 원소 순서를 반대로 뒤집어 반환.
- 배열안에서 직접 수행되어 배열 정렬순서 변환됨.
var b = [1,2,3];
b.reverse();
console.log(b);
Output :
sort()
- 정렬
- undefined는 배열의 끝부분으로
- 정렬 조건도 바꿀 수 있음
var c = [1,2,3,4];
c.sort();
console.log(c);
c.sort(function(a,b) {
return b - a;
})
console.log(c);
Output :
concat()
- concat의 전달인자를 추가한 배열 반환
var d = [1,2,3];
console.log(d.concat(4,5));
console.log(d.concat([4,5]));
console.log(d.concat([4,5], [6,7]));
console.log(d.concat([4, [5,6]]));
Output :
slice()
- subarray 반환
- -1은 마지막 원소
- 음수는 뒤에서부터 세는 것
var e = [1,2,3,4,5];
console.log(e.slice(0,3));
console.log(e.slice(3));
console.log(e.slice(1,-1));
console.log(e.slice(-3,-2));
Output :
splice()
- 잘라낸 후 값 return, 실제 배열 도 수정된다.
- 값을 추가할 때도 사용 가능
- 첫 두 인자 -> 삭제할 원소 지정 (a, b) -> a부터 시작해서 b개 삭제
- 세번째 인자부터 추가할 값
push(), pop(), unshift(), shift()
- push(), pop() -> 맨 뒤에서 원소 추가제거
- unshift(), shift() -> 맨 앞에서 원소 추가 제거
'웹 프로그래밍 > Javascript' 카테고리의 다른 글
Javascript Function (0) | 2020.06.24 |
---|---|
Javascript Scope, 변수 (0) | 2020.06.23 |
JavaScript Property (0) | 2020.06.21 |
JavaScript Object 생성 (0) | 2020.06.19 |
Javascript 세미콜론 (0) | 2020.05.30 |