두 개의 배열 안에서 중복값 찾기

각기 다른 두 개의 배열 안에서 gameNo 라는 공통된 값을 찾아 제거한 후 새로운 배열로 return 해야 하는 일이 있었다.

아무래도 filter가 리턴 조건을 충족하는 요소만 모아서 새로운 배열을 만들어주니까 filter 안에 filter 를 넣어서 함수를 만들어 보았다.

 const writeDate = resGame.data.content.filter((playGame) =>
        review.data.content.filter(
          (review) => review.gameUserNo !== playGame.gameUserNo
        )
      )

근데 값이 나오지 않았다. 중복값이 제거되지를 않더라.

!==를 ===으로 바꾸어도 결과는 똑같았다. 이유가 뭘까 고민해봤는데 filter 안의 filter는 true false 값만 배출해 주어야 상위 filter 에서 새로운 배열을 만들어 주는데 나는 filter 함수 안에서 계속 true 값만 내보냈기 때문에 !==를 사용해도 ===를 사용해도 값이 똑같았던 것이었다.

const writeDate = resGame.data.content.filter((playGame) => 
     !review.data.content.filter(
       (review) => review.gameUserNo === playGame.gameUserNo
     )
   )

공통된 값을 boolean으로 만들어주니 중복값이 잘 제거되었다.

혹시 filter말고 find나 some을 사용해도 되나 싶어서 해 보았는데 잘 되었다.

   const writeDate = resGame.data.content.filter((playGame) => {
        return !review.data.content.some(
          (review) => review.gameUserNo === playGame.gameUserNo
        )
      })
   const writeDate = resGame.data.content.filter((playGame) => {
        return !review.data.content.find(
          (review) => review.gameUserNo === playGame.gameUserNo
        )
      })

혹시 두 개의 배열에서 중복값 제거하는 또 다른 방법이 있나 찾아 보았다.

reduce를 사용하는 방법도 한 번 고민해 봐야겠다.

좋은 웹페이지 즐겨찾기