Server/성능개선

JS & TS) Map으로 시간복잡도 줄이기

Juzdalua 2025. 12. 10. 18:51

C++에서는 map, set을 엄청 자주 사용했는데,

JS에서는 이상하게 사용을 안하게 된다.

그러다 반복문에서 include, find 등 람다식을 사용해 이중포문을 만들게 되었고.

 

5만건의 유저 업데이트 중, O(n2)이라는 무시무시한 경험을 해버렸다.

그래서 부랴부랴 C++에서 사용했던 맵을 다시 사용했다.

 

const users: User[] = await this.userRepo.find();

// new Map
const userMap: Map<number, User> = new Map<number, User>(users.map((u) => [u.id, u]));

// has
if(userMap.has(1)) console.log('id 1인 유저 포함');

// get
const user1 = userMap.get(1);

// set
userMap.set(2,{id: 2, name: 'jun'});

// delete
userMap.delete(2);

// for
for(const key of userMap.keys()){}
for(const value of userMap.values()){}
for(const [key, value] of userMap.entries()){}

// size
console.log(userMap.size)