Array, Object

JuhyeokLee·2022년 4월 11일
0

Algorithm&DataStructure

목록 보기
1/13
post-thumbnail

Array(순차 리스트)

배열 생성 및 초기화

//배열 생성
const arr1 = new Array();
const arr2 = [];
const arr3 = new Array(5);

//배열 초기화;
const arr5 = new Array(5).fill(5); // [5,5,5,5,5]
const arr4 = [1, 2, 3, 4, 5]; // [1,2,3,4,5]
const arr6 = Array.from(Array(5), (value, idx) => idx + 1); // [1,2,3,4,5]

배열을 생성 후에 특정한 값으로 채우고 싶다면 fill 메소드를 사용하는 것이 좋고, 각각의 인덱스마다 다른 값을 주고 싶다면 Array.from 메소드를 사용하여 각 인덱스의 값을 지정해줄 수 있다.

배열 관련 메소드와 속성

  • lenght : 배열의 길이를 측정하는 속성
    배열의 길이를 특정한 값으로 지정할 수도 있지만 사용하지 않기를 권장함.
    const arr = [1, 2, 3, 4, 5, 6];
    arr.length = 3;
    console.log(arr); // [1,2,3]
    arr.length = 10; 
    console.log(arr); // [1,2,3, <empty items 7>]
  • join : 배열을 문자열로 변경하고 싶을 때 사용
    const arr = [1, 2, 3, 4, 5, 6];
    console.log(arr.join(", ")); // 1, 2, 3, 4, 5, 6
  • reverse : 배열을 뒤집을 때 사용
    reverse를 사용하면 arr 배열은 뒤집힌 상태로 값이 변경된다.
    const arr = [1, 2, 3, 4, 5, 6];
    console.log(arr.reverse()); // [6, 5, 4, 3, 2, 1]
    console.log(arr); // [6, 5, 4, 3, 2, 1]
  • concat : 배열을 합칠경우에 사용
    const arr1 = [1, 2, 3, 4, 5, 6];
    const arr2 = [7, 8, 9, 10];
    console.log(arr1.concat(arr2)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • push, pop : 배열의 끝에 값을 추가하거나 삭제할 때 사용
    pop 메소드는 배열 끝에 값을 삭제하고 삭제한 값을 리턴하기 때문에 console.log로 확인하면 삭제된 값이 나오게 된다.
    const arr = [1, 2, 3, 4, 5, 6];
    arr.push(7); // [1, 2, 3, 4, 5, 6, 7]
    arr.push(7, 8, 9); // [1, 2, 3, 4, 5, 6, 7, 7, 8, 9]
    arr.pop(); // 9
    arr.pop(); // 8
    console.log(arr.pop()); // 7
    console.log(arr); // [1, 2, 3, 4, 5, 6, 7]
  • unshift, shift : 배열의 처음에 값을 추가하거나 삭제할 때 사용
    pop메소드와 마찬가지로 shift도 삭제한 값을 리턴하기 때문에 console.log로 확인하면 삭제된 값이 나온다.
    const arr = [1, 2, 3, 4, 5, 6];
    arr.shift(); // 1
    arr.shift(); // 2
    console.log(arr); // [3, 4, 5, 6]
    arr.unshift(10); 
    console.log(arr); // [10, 3, 4, 5, 6]
  • slice : 배열의 중간 부분을 잘라서 사용
    slice는 원래 배열의 영향을 주지 않는다.
    const arr = [1, 2, 3, 4, 5, 6];
    console.log(arr.slice(2, 4)); // [3, 4]
    console.log(arr.slice(2)) // [3, 4, 5, 6]
    console.log(arr); // [1, 2, 3, 4, 5, 6]
  • splice : 배열 중간 부분의 값을 삭제하고, 추가할 경우 사용
    splice(삭제할인덱스, 삭제할 갯수, 삭제 이후에 추가할 값)
    const arr = [1, 2, 3, 4, 5, 6];
    arr.splice(2, 2); // [3, 4]
    console.log(arr); // [1, 2, 5, 6]
    arr.splice(1, 2, 7, 8); // [2, 5]
    console.log(arr); // [1, 7, 8, 6]

배열 순회

  • 일반적인 for문

    const arr = [1, 2, 3, 4, 5];
    for(let i = 0; i<arr.length; i++){
        console.log(arr[i]); 
    } // 1 2 3 4 5 6
  • for of문

    const arr = [1,2,3,4,5,6]
    for(const i of arr){
        console.log(i);
    }// 1 2 3 4 5 6

Object

객체 생성 및 초기화

const obj = new Object(); // {}
const obj1 = {}; // {}
const obj2 = { name: "아무개" }; // { name : "아무개"}

객체 값 추가 및 삭제

const obj = {};
obj["email"] = "aa@aa.com";
obj.phone = "01012345678";
console.log(obj); // { email : "aa@aa.com", phone : "01012345678" }

delete obj.phone; // true
console.log(obj) // { email : "aa@aa.com" }

객체 내의 key, value 유무 확인

const obj = { email : "aa@aa.com" };
console.log("email" in obj); //true
console.log("phone" in obj); //false

//객체의 key, value 값 가져오기
console.log(Object.keys(obj)); // [ "email" ]
console.log(Object.values(obj)); // [ "aa@aa.com" ]

객체 순회

const obj = { email : "aa@aa.com" };
for(let i in obj){
  // 이때 i는 key값
	console.log(i, obj[i]) //email aa@aa.com 
}

시간 복잡도

찾고자 하는 원소의 인덱스를 알고 있다면 O(1)로 원소를 찾을 수 있다.

특정 원소를 삽입, 삭제하는데의 시간복잡도는 O(n)이 걸린다.(splice)
삽입하거나 삭제한 공간을 메꾸기 위해서 값들을 하나씩 밀거나 땡겨야 하기 때문이다.

push, pop는 O(1), unshift, shift는 O(n)의 시간복잡도를 가진다.
push, pop은 배열의 끝에서 추가 삭제 되기 때문에 다른 인덱스를 변경할 필요가 없지만 shift, unshift는 배열의 처음에 값이 추가 삭제 되는 것이기 때문에 전체 데이터에 인덱스를 변경해주어야 한다.

profile
성장하는 개발자가 되겠습니다~

0개의 댓글