// 초기 데이터
const data = {
id: '',
pwd: '',
list: [],
};
// // 첫 번째 갱신
// rebuild3(data.list, addList1);
// console.log(data.list);
// // 두 번째 갱신
// setTimeout(() => {
// rebuild3(data.list, addList2);
// console.log(data.list);
// }, 2000);
const rebuild4 = (list, additionalList) => {
let categorySeqMap = {};
// 기존 리스트의 마지막 seq 정보 가져오기
let lastSeqByCategory = {};
list.forEach((item) => {
lastSeqByCategory[item.categorycode] = item.seq;
});
// reduce를 사용하여 각 카테고리에 대한 마지막 seq 얻기
let lastSeqByCategory = list.reduce((acc, item) => {
acc[item.categorycode] = item.seq;
return acc;
}, {});
// 갱신된 정보를 포함한 전체 목록
let combinedList = [...list];
// categorycode 별로 seq 순번 처리
additionalList.forEach((item) => {
if (!categorySeqMap[item.categorycode]) {
categorySeqMap[item.categorycode] = lastSeqByCategory[item.categorycode] + 1 || 1;
}
item.seq = categorySeqMap[item.categorycode]++;
combinedList.push(item);
});
// dpacode 속성 값 중복 처리
let dpacodeMap = {};
combinedList.forEach((item) => {
let originalDpacode = item.dpacode;
if (!dpacodeMap[originalDpacode]) {
dpacodeMap[originalDpacode] = 1;
} else {
// 중복된 dpacode 처리
let newDpacode = `${originalDpacode}_${dpacodeMap[originalDpacode]}`;
dpacodeMap[originalDpacode]++;
item.dpacode = newDpacode;
}
});
// categorycode 별로 정렬
combinedList.sort((a, b) => a.categorycode.localeCompare(b.categorycode) || a.seq - b.seq);
// 결과를 기존 리스트에 복사
list.length = 0;
Array.prototype.push.apply(list, combinedList);
};
// 첫 번째 갱신
rebuild4(data.list, addList1);
console.log(data.list);
// 두 번째 갱신
setTimeout(() => {
rebuild4(data.list, addList2);
console.log(data.list);
}, 2000);