객체는 정렬되어 있을 필요가 없을 때 잘 작동한다.
그리고 빠르게 접근, 입력과 제거를 원할 때 좋다.
Insertion : O(1)
Removal : O(1)
Searching : O(N)
Access : O(1)
아래와 같은 객체가 있다고 가정해보자.
let instructor = { firstName : "sarah", isInstructor : true, favoriteNum : [1,2,3,4] }
Object.keys(instructor) // ["firstName", "isInstructor", "favoriteNum"] Object.values(instructor) // ["sarah", true, Array(4)] Object.entries(instructor) // [Array(2), Array(2), Array(2)] // 객체 자체의 enumerable 속성 [key, value] 쌍의 배열을 반환 instructor.hasOwnProperty("firstName") // true // firstName이라는 속성이 있는지 boolean타입으로 반환
배열은 정렬되어 있는 형태이다. 그래서 보통 정렬되어 있는 데이터를 위해서 사용한다. 하지만 연산하는 시간이 더 걸릴 수 있다.
Insertion : It depends...
Removal : It depends...
Searching : O(N)
Access : O(1)
배열 끝에 요소를 추가하는 메소드인 push()를 이용할 경우 O(1)로 상수시간이다.
하지만 배열의 맨 앞에 요소를 추가하거나 제거할 경우 기존에 배열마다 가지고 있는 인덱스를 새로 배정해야 한다. 이 경우에는 O(N) 선형시간이다.
push : O(1)
pop : O(1)
shift : O(N)
unshift : O(N)
concat : O(N)
slice : O(N)
splice : O(N)
sort : O(NlogN)
forEach/map/filter/reduce/etc. : O(N)
✨ 객체는 거의 모든것을 더 빠르게 수행하지만, 정렬되어 있지 않다.
배열은 정렬되어 있지만, 끝에 추가하고 제거하는 작업이 시작에 추가하고 제거하는 작업보다 훨씬 빠르다.