본문 바로가기
자기개발/TIL

두개의 배열로 filter 사용하기

by 금화맘 2023. 8. 1.

프로그래머스에서 2개의 배열을 주는데 배열a에 있는 숫자가 배열b에 있으면 제거하고 남은 배열 a를 반환하는 거였다.

그래서 나는 filter를 사용하기로 생각했고

내가 생각보다 filter에 대한 활용도가 떨어지는 것을 확인할 수 있었다.

a배열에 b의 값과 같은 것을 빼고 반환하는 거였다.

호기롭게 그렇다면 a배열에 b의 값과 같은 것을 먼저 반환하고 !만 붙여서 코드를 제출하면 되겠지라고 생각했고 코드를 작성했다.

var answer = arr.filter(a=> arr[a]==delete_list[a]); 이렇게 작성했더니 

실행한 결괏값 [293,1000,395,678,94]이 기댓값 [293,395,678]과 다릅니다.

를 받을 수 있었다.

즉 배열 a 만 받아냈다는 소리였다.

a를 정의하는게 잘못정의 했는가 싶어서 a의 위치를 온갖 곳으로 옮겨 봤다.

var answer = arr.filter(a=> a==a.delete_list);로 작성했더니 실행한 결괏값 []이 기댓값 [293,395,678]과 다릅니다.

이렇게 하고 나서부터 조건이 잘못됐다는 것을 깨닫고 뭐가 문제일까 고민하던 중에 너무 모르겠어서 google에다가 

'js filer 2배열 '이란 키워드로 검색했더니 은혜롭게도 includes를 사용해야한단 것을알 수 있었다.

https://velog.io/@ireneeming/JavaScript-%EB%91%90-%EB%B0%B0%EC%97%B4-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0-filter

 

[JavaScript] 두 배열 비교하기 filter()

링크텍스트

velog.io

이분의 설명을 읽고 거의 답안지 수준의 글이 있었기 때문에 다음엔 includes를 까보기로 했다.

 

다른 사람들은 어떻게 풀었는지 궁금해서 열었더니 대부분 includes를 사용했고, set을 사용해서 has를 쓰거나 some을 사사용한 것을 봤다.

 

function solution(arr, delete_list) {
  const set = new Set(delete_list);
  return arr.filter((v) => !set.has(v));
}

역시 set을 활용한 사람이 있을 거라 생각했는데 set에 has가 있단 것을 까마득하게 모르고 잇었기 때문에 검색해서 알아볼 수 있는 시간을 가질 수 있어서 너무 좋았다.

function solution(arr, delete_list) {
    return arr.filter( el=> {return !delete_list.some(v => v===el)})
}

이렇게 some을 사용하는 것도 봤는데 some을 사용할 수 이을 거라 생각을 못해서 견문을 넓힐 수 있었다.

https://velog.io/@ssoon-m/JS-Array.includes-%EC%99%80-Set.has

 

[JS] Array.includes 와 Set.has

아직도 includes로만 데이터를 조회 하나요?!

velog.io

 

이건 includes와 set의 has를 비교한 글이다. 설명을 너무 잘해주셔서 좋았다

'자기개발 > TIL' 카테고리의 다른 글

js 부분 문자열 이어 붙여 문자열 만들기  (0) 2023.08.05
js 간단한 식 계산하기  (0) 2023.08.03
js 5명씩  (0) 2023.07.31
홀짝에 따라 다른 값 반환하기 js  (0) 2023.07.28
js 문자열 바꿔서 찾  (0) 2023.07.27