🚀 Programming/RPA_JavaScript+C#

[JavaScript] 필드가 다른 두 자료의 대칭차집합 구하기

jishushu 2024. 10. 22. 21:26
728x90
반응형

// 데이터 정의 

erpData = 사업자번호, 관리번호, 금액

comData = 사업자번호, 관리번호, 등록번호, 금액

 

문제1. erpData와 comData의 관리번호 비교를 통해 둘 중 한곳에만 있는 데이터를 추출

=> 두 자료간 대칭 차집합

샘플데이터 확인은 더보기!

붉은색으로 표시한 데이터가 추출되어야할 데이터.

더보기

const erpData = [
    ["1222860054", "20240517410000260590srrs", "143,000"],
    ["1180212155", "20240517410000260590srrt", "571,500"],
    ["1371513607", "20240521410000260590siwq", "111,200"],
    ["1048101300", "20240521410000260590siwr", "169,800"],
    ["1318160204", "20240521410000260590siws", "211,300"],
    ["1301313029", "20240521410000260590siwt", "111,200"],
    ["1378172843", "20240522410000260590sj3g", "58,500"],
    ["1218107309", "20240522410000260590sj3h", "276,500"],
    ["1390761167", "20240522410000260590sj3i", "694,800"],
    ["1398112365", "20240522410000260590sj3j", "1,023,600"],
    ["2138175580", "20240523410000260590sj3k", "984,000"],
    ["1048104326", "20240523410000260590sj3l", "542,100"],
    ["3201301956", "20240523410000260590sj3m", "694,800"],
    ["5451000254", "20240523410000260590sqys", "47,500"],
    ["1378170530", "20240524410000260590srrm", "164,500"],
    ["1400700118", "20240526410000260590srqv", "396,100"],
    ["7598700097", "20240527410000260590srqw", "111,200"],
    ["1228112275", "20240528410000260590srru", "173,700"],
    ["6033961257", "20240528410000260590srsj", "347,400"],
    ["6033961257", "20240529410000260590srw2", "572,000"],
    ["1304687908", "20240529410000260590srwe", "95,000"],
    ["1013370845", "20240530410000260590srw3", "286,000"],
    ["1378107814", "20240530410000260590srw4", "143,000"],
    ["1348108925", "20240530410000260590srw5", "422,600"],
    ["1348108925", "20240531410000260590srwf", "614,600"]
];

const comData = [
    ["1222860054", "20240517410000260590srrs", "131-82-02536", "143,000"],
    ["1180212155", "20240517410000260590srrt", "131-82-02536", "571,500"],
    ["1371513607", "20240521410000260590siwq", "131-82-02536", "111,200"],
    ["1048101300", "20240521410000260590siwr", "131-82-02536", "169,800"],
    ["1318160204", "20240521410000260590siws", "131-82-02536", "211,300"],
    ["1301313029", "20240521410000260590siwt", "131-82-02536", "111,200"],
    ["1378172843", "20240522410000260590sj3g", "131-82-02536", "58,500"],
    ["1218107309", "20240522410000260590sj3h", "131-82-02536", "276,500"],
    ["1390761167", "20240522410000260590sj3i", "131-82-02536", "694,800"],
    ["1398112365", "20240522410000260590sj3j", "131-82-02536", "1,023,600"],
    ["2138175580", "20240523410000260590sj3k", "131-82-02536", "984,000"],
    ["1048104326", "20240523410000260590sj3l", "131-82-02536", "542,100"],
    ["3201301956", "20240523410000260590sj3m", "131-82-02536", "694,800"],
    ["5451000254", "20240523410000260590sqys", "131-82-02536", "47,500"],
    ["1378170530", "20240524410000260590srrm", "131-82-02536", "164,500"],
    ["1400700118", "20240526410000260590srqv", "131-82-02536", "396,100"],
    ["7598700097", "20240527410000260590srqw", "131-82-02536", "111,200"],
    ["1228112275", "20240528410000260590srru", "131-82-02536", "173,700"],
    ["6033961257", "20240528410000260590srsj", "131-82-02536", "347,400"],
    ["6033961257", "20240529410000260590srw2", "131-82-02536", "572,000"],
    ["1304687908", "20240529410000260590srwe", "131-82-02536", "95,000"],
    ["1013370845", "20240530410000260590srw3", "131-82-02536", "286,000"],
    ["1378107814", "20240530410000260590srw4", "131-82-02536", "143,000"],
    ["1348108925", "20240530410000260590srw5", "131-82-02536", "422,600"],
    ["1348108925", "20240531410000260590srwf", "131-82-02536", "614,600"],
    ["1318202536","20240517410000260590sj3v",  "122-28-60054", "-571,500"],
    ["1318202536","20240517410000260590sj3u", "118-02-12155", "-143,000"]
];

1.관리번호로만 이루어진 set 생성

const erpSet = new Set(erpData.map(record => record[1]));
const comSet = new Set(comData.map(record => record[1]));


2. 대칭차집합 계산 : 관리번호가 있는지 확인 후 없는 경우만 필터

const onlyInErp = [...erpSet].filter(id => !comSet.has(id));
const onlyInCom = [...comSet].filter(id => !erpSet.has(id));


3. 대칭차집합에 해당하는 레코드 추출

const erpOnlyRecords = erpData.filter(record => onlyInErp.includes(record[1]));
const comOnlyRecords = htxData.filter(record => onlyInCom.includes(record[1]));

 

문제2. 추출된 데이터를 하나의 결과파일에 작성.

결과파일의 필드:  관리번호, 사업자번호, 빈 칸, 금액, 데이터 출처

* 데이터 출처는 erpData 일 경우 'erp', comData 일 경우 'com' 으로 표기

//결과를 담을 배열 정의
const resData = [];

// erpData에만 있는 레코드 추가 (출처 'erp')
erpOnlyRecords.forEach(record => resData.push([...record, 'erp']));

// comData에만 있는 레코드 추가 (출처 'com')
comOnlyRecords.forEach(record => resData.push([record[1], record[0], "", record[3], 'com']));

// 결과 출력
console.log(resData);

//결과
[
["20240517410000260590sj3v", "1318202536", "", "-571,500", "com"], 
["20240517410000260590sj3u", "1318202536", "", "-143,000", "com"]
]



반응형