Map
을 선언해 최종적인 정렬까지 진행하였음
효율이 잘 나오는 코드들을 살펴보니 대체적으로 Object.assign
등을 활용해 병합하는 것을 확인
type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue };
type ArrayType = { "id": number } & Record<string, JSONValue>;
function join(arr1: ArrayType[], arr2: ArrayType[]): ArrayType[] {
// 모든 객체를 id를 키로 하는 Map으로 변환
const mergedMap = new Map<number, ArrayType>();
// arr1과 arr2의 모든 객체를 순회하며 Map에 추가 또는 병합
for (const arr of [arr1, arr2]) {
for (const obj of arr) {
if (mergedMap.has(obj.id)) {
// 이미 존재하는 id라면 객체 병합
mergedMap.set(obj.id, { ...mergedMap.get(obj.id)!, ...obj });
} else {
// 새로운 id라면 그대로 추가
mergedMap.set(obj.id, { ...obj });
}
}
}
// Map을 배열로 변환하고 id 기준으로 정렬
return Array.from(mergedMap.values()).sort((a, b) => a.id - b.id);
}