ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] 서로 다른 객체배열 내 중복객체 찾기
    JavaScript 2022. 3. 29. 16:37
    반응형
    SMALL
    서로다른 객체배열이 있을때 두객체 배열에 공통적으로 들어있는 객체요소를 찾아내보자

     

     

     

     

     

    • 아래와 같이 배열내에 day는 동일하지만 week가 중복된 경우 data를 먼저 가공한다
    • week에 콤마가 들어있는지 유무에 따라 filter를 사용하여 가공한다
    let data = [
        {
            "day": "mon",
            "week": "오전",
        },
        {
            "day": "mon",
            "week": "오전,오후",
        },
        {
            "day": "tue",
            "week": "오후",
        },
        {
            "day": "tue",
            "week": "오전,오후",
        },
        {
            "day": "wed",
            "week": null,
        },
        {
            "day": "sun",
            "week": "오후",
        },
    ]

     

     

     

     

     

     

     

     

    let double = data.filter(obj => { return obj.week.includes(',') }) // 오전,오후
    let single = data.filter(obj => { return !obj.week.includes(',') || obj.week != 'null'}) // 오전 or 오후
    
    // date 가공 결과
    let double = [
        {
            "day": "mon",
            "week": "오전,오후",
        },
        {
            "day": "tue",
            "week": "오전,오후",
        },
    ]
    
    let single = [
        {
            "day": "mon",
            "week": "오전",
        },
        {
            "day": "tue",
            "week": "오후",
        },
        {
            "day": "wed",
            "week": null,
        },
        {
            "day": "sun",
            "week": "오후",
        },
    ]
    
    let doubleString = JSON.stringfy(double)  // double배열을 문자열로 바꾼다.
    
    let tempStr = single.filter(obj => { return !doubleString.include(obj.day) }) // single배열중에서 day가 double배열에 중복되지 않는 단일값만 temp배열에 담기 
    
    let tempResult = double.push(tempStr) // 오전,오후 double배열에 day가 겹치지 않는 단일배열을 합치기
    
    data = tempResult

     

    1. data 가공하여 배열 분리 

    2. JSON.stringfy () 를 이용하여 double배열을 문자열로 바꾼다.

    3. single배열의 요소들을 filter로 하나씩 접근한다.

    4. 문자열로 변경한 double배열에 single배열의 day요소가 중복되어 있지 않다면 includes() 를 return한다.

    5. 그러면 tempStr 에 [ { "day" : "sun", "week" : "오후" } ] 가 담긴다. 

    6. double배열에 tempStr배열을 병합한다

    7. 원본 data 배열을 병합한 tempResult로 치환한다. 

     

     

     

     

     

     

     

     

     

    결과

    let data = [
        {
            "day": "mon",
            "week": "오전,오후",
        },
        {
            "day": "tue",
            "week": "오전,오후",
        },
        {
            "day": "wed",
            "week": null,
        },
        {
            "day": "sun",
            "week": "오후",
        },
    ]

     

     

     

     

     

    반응형
    LIST

    'JavaScript' 카테고리의 다른 글

    [JS] window.location  (0) 2022.03.30
    [JS] Cross Domain  (0) 2022.03.30
    [JS] Spread Operator 스프레드 연산자  (0) 2022.03.28
    [JS] map, filter, reduce 정리  (0) 2022.03.04
    [JS] hasOwnProperty  (0) 2022.03.02

    댓글

Designed by Tistory.