JavaScript Array

Javascript의 배열

  • 정렬된 값의 집합
  • 타입이 고정되어 있지 않음
  • 배열이 밀집도가 높지 않음
    • 원소의 index가 연속적이지 않아도 됨
    • 원소 사이에 빈자리가 있어도 됨
  • Array.prototype의 프로퍼티를 상속받음.

배열 생성

  1. 배열 리터럴
  2. 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

+ Recent posts