ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [js] 자바스크립트 json array 중복제거, 중복개수 카운팅하기
    JavaScript 2023. 1. 14. 15:43
    반응형
        //1. overlapArr json array 중복제거
        let overlapArr = [
            { id : 1, name : "이름A", age : 5 },
            { id : 1, name : "이름B", age : 10 },
            { id : 2, name : "이름C", age : 20 },
            { id : 3, name : "이름D", age : 40 },
            { id : 4, name : "이름E", age : 50 },
            { id : 5, name : "이름F", age : 10 },
            { id : 5, name : "이름G", age : 20 },
            { id : 5, name : "이름G", age : 30 } 
         ];
        var deduplicationArr = overlapArr.filter((item1, idx1)=>{
            return overlapArr.findIndex((item2, idx2)=>{
                return item1.id == item2.id;
            }) == idx1;
        });
        console.log(deduplicationArr);
        
        //2. overlapArr 중복개수 출력
        let result = overlapArr.reduce(function(obj, cur) {
            if (!obj[cur.id]) {
                obj[cur.id] = 0;
            }        
            obj[cur.id] += 1;
            //중복건수가 1개이상일때 메세지 출력
            if(obj[cur.id] == 2){
                alert("중복값존재");
            }
            return obj;
        }, {})
        console.log(result);
        
        
        //그 밖의 방법들............
         
        //1. reduce + findIndex 를 이용해서 중복제거하기
        const example1 = [
            { id: 123, name: "aaa" },
            { id: 123, name: "aaa" },
            { id: 123, name: "bbb" },
            { id: 5456, name: "zxc" }
        ];
    
        let example1Result = example1.reduce(function(acc, current) {
            if (acc.findIndex(({ id }) => id === current.id) === -1) {
                acc.push(current);
            }
            return acc;
        }, []);
       
        //2. filter + findIndex를 이용
        const example3 = [
            { id: 123, name: "aaa" },
            { id: 123, name: "aaa" },
            { id: 123, name: "bbb" },
            { id: 5456, name: "zxc" }
        ];
        
        let example3Result = example3.filter((item, i) => {
            return (
                example3.findIndex((item2, j) => {
                    return item.id === item2.id;
                }) === i
            );
        });
                
        // 2-2. filter만 이용하기 
        // filter에는 3번째 인자로 callback 함수가 들어간다.
        let example3_1 = example3.filter(
            (arr, index, callback) => index === callback.findIndex(t => t.id === arr.id)
        );
       
        //3. Set을 이용하기. 
        //Set은 객체가 전부 같은 것만 중복제거를 한다. id == id && name == name   
        const example3 = [
            { id: 123, name: "aaa" },
            { id: 123, name: "aaa" },
            { id: 123, name: "bbb" },
            { id: 5456, name: "zxc" }
        ];
        
        console.log([...new Set(example3.map(JSON.stringify))].map(JSON.parse));
        //결과 [ { id: 123, name: "aaa" },{ id: 123, name: "bbb" },{ id: 5456, name: "zxc" }]

     

    json array내 특정 key 및 조건으로 중복제거하기

    let origin =[
        {"masterCd":"K1", "bitCode":"TK", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
        , {"masterCd":"C1", "bitCode":"KE", "showYn":"Y", "displayYn1":"Y", "displayYn2":"N"}
        , {"masterCd":"D2", "bitCode":"KIX", "showYn":"Y", "displayYn1":"Y", "displayYn2":"N"}
        , {"masterCd":"F3", "bitCode":"ICN", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
        , {"masterCd":"I7", "bitCode":"PO", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
        , {"masterCd":"K1", "bitCode":"TK", "showYn":"N", "displayYn1":"Y", "displayYn2":"N"}
    ]
    
    let target = [
        {"masterCd":"K1", "bitCode":"TK", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
    ]
    
    console.log("==== reduce 사용 ====");
    
    let uniqueRows = origin.reduce((acc, current) => {
        const isDuplicate = acc.find(item => item.masterCd === current.masterCd && item.bitCode === current.bitCode);
        if (!isDuplicate) {
            acc.push(current);
        }
        return acc;
    }, []);
    
    console.log("결과1");
    console.log(uniqueRows);
    
    
    console.log("==== object key 조합 중복체크 사용 ====");
    
    
    // 중복을 체크할 객체 생성
    let uniqueCheck = {};
    
    // 중복을 제거한 새로운 배열 생성
    let uniqueRows2 = origin.filter(item => {
        const key = item.masterCd + '|' + item.bitCode;
        if (!uniqueCheck[key]) {
            uniqueCheck[key] = true;
            return true;
        }
        return false;
    });
    
    console.log("결과2");
    console.log(uniqueRows2);
    
    
    console.log("==== new Set() 사용 ====");
    
    // 중복을 체크할 Set 생성
    let uniqueCheck2 = new Set();
    
    // 중복을 제거한 새로운 배열 생성
    let uniqueRows3 = origin.filter(item => {
        const key = item.masterCd + '|' + item.bitCode;
        if (!uniqueCheck2.has(key)) {
            uniqueCheck2.add(key);
            return true;
        }
        return false;
    });
    
    console.log("결과3");
    console.log(uniqueRows3);
    
    
    console.log("==== 원본 json에 target json을 비교하여 중복인것 표시하기 ====");
    
    let result = origin;
    
    result.forEach(row => {
        let isDuplicate = target.some(
            targetRow => targetRow.masterCd === row.masterCd && targetRow.bitCode === row.bitCode
        );
        row.flag = isDuplicate ? "DELETE" : "";
    
    
    });
    
    console.log("결과4");
    console.log(result);
    반응형

    댓글

Designed by Tistory.