Object는 순서가 없다(unordered list) 오로지 key🔑를 통해서 접근 및 추가!
- 정렬이 필요 없을 때
- 빠른 접근,추가,삭제
Insertion(추가) - O(1)
Removal(삭제) - O(1)
Searching(탐색) - O(N)
Access(접근) - O(1)
const exObject = {
one : 1,
two : 2,
three : 3,
isTrue : true,
isFalse : false,
}
// Object의 크기가 커질 수록 method가 처리하는 연산이 커짐 O(N)
console.log(Object.keys(exObject));
// key 배열 return [ 'one', 'two', 'three', 'isTrue', 'isFalse' ]
/* Objects.valuse, Object.entires
또한 Object.keys와 마찬가지인 이유로 object의 요소가 늘어날수록 연산이 커짐 O(N) */
console.log(Object.values(exObject));
// value 배열 return [ 1, 2, 3, true, false ]
console.log(Object.entries(exObject));
/* [key-value]쌍의 배열
[
[ 'one', 1 ],
[ 'two', 2 ],
[ 'three', 3 ],
[ 'isTrue', true ],
[ 'isFalse', false ]
]
*/
/* Object.hasOwnProperty(key) , Object.hasOwn(object,key)
-> object의 내부 key값 존재 유무 정해진 값을 받아 boolean type으로 return => O(1) */
console.log(exObject.hasOwnProperty('one'));//true
console.log(exObject.hasOwnProperty(1));//false (key기준)
console.log(Object.hasOwn(exObject,'two'));//true
- ordered list
- 순서가 정해져 있기 때문에 연산에 시간이 더 걸릴 수 있다.
- 배열에 있는 데이터를 접근하는 것은 빠름,
- 정렬될 필요가 있는 데이터 및 정렬 되어 있는 데이터 보관 유리
shift - O(N)
: reindex 필요
unshift - O(N)
: reindex 필요
concat - O(N)
: 병합 할 배열의 크기가 커질 수록 오래 걸림
slice - O(N)
: 배열 전체 또는 일부를 copy하지만 copy할 배열의 길이에 따라 다름
splice - O(N)
: elem 제거 및 추가-O(N)
sort - O(N logN)
forEach(),map(),filter(),reduce() 등등 - O(N)