배열 중복 삭제?

dudgus5766·2021년 7월 21일
2

JavaScript

목록 보기
14/14
post-thumbnail

"당신은 중복된 배열입니다. 손가락이 가리키는 곳을 봐주세요."

백준 알고리즘 3052번 문제를 풀다 찾은 📖 배열에 중복을 제거하는 3가지 방법!
하나 하나 차례대로 써보고 정리해본다!


📖 배열에 중복을 제거하는 3가지 방법

1. Set

Javascript에서 Set 오브젝트를 이용하면 중복없는 데이터를 표현할 수 있다.
Set 오브젝트의 이런 특징을 이용해서, 배열의 중복을 제거할 수 있다.

const dupArr = [1, 2, 3, 1, 2];

const set = new Set(dupArr);

const myArr = [...set];

console.log(Array.isArray(myArr)); //true
console.log(myArr); //1,2,3
  • const set = new Set(dupArr);
    중복값이 있는 배열을 Set 오브젝트로 만들어서 중복을 제거한 후,

  • const myArr = [...set];
    Spread Operator(전개연산자)를 사용하여 Set 오브젝트를 다시 배열로 변환.


2. indexOf(), filter()

indexOf() 함수는, 배열에서 특정값이 처음으로 나타나는 index를 리턴한다.
filter() 함수는 특정 조건에 부합하는 배열의 모든 값을 배열 형태로 리턴한다.

const dupArr = [1, 2, 3, 1, 2];

const myArr = dupArr.filter((element, index) => {
    return dupArr.indexOf(element) === index;
});

console.log(Array.isArray(myArr)); //true
console.log(myArr); //1,2,3
  • dupArr.filter(callback);
    filter() 함수는 dupArr의 원소들을 callback 함수로 전달하여 각 원소들이 callback 함수에 정의된 기준에 부합하는지 검사하고, 검사 결과가 true를 리턴하는 원소을 모아서 배열 형태로 리턴.

  • dupArr.indexOf(element) === index;
    filter() 함수로 전달 된 callback 함수는 검사하고 있는 값(element)이 배열(dupArr)에서 가장 처음으로 나타는 index와 검사하고 있는 원소의 index와 비교하여 같을 경우에만 true를 리턴.
    위의 예제에서 dupArr의 값이 순서대로 전달되면 'dupArr.indexOf(element) === index' 구문은 true, true, true, false(4번째 1의 indexOf는 0이다 그러므로 element의 index인 3과 다르다), false 를 순서대로 리턴하여 중복되는 값이 첫번째로 나타나는 경우에만 filter 함수에서 걸러짐.


3. forEach(), includes()

forEach() 함수는 주어진 배열을 순회하면서, 배열의 원소들로 주어진 callback함수를 실행한다.
include() 함수는 주어진 배열에 특정 값이 포함되는지 여부를 검사한다.

const dupArr = [1, 2, 3, 1, 2];

let myArr = []; //myArr를 배열로 선언
dupArr.forEach((element) => {
    if (!myArr.includes(element)) {
      // [!]는 여기서 '포함되지 않은'을 뜻함 
        myArr.push(element);
    }
});

console.log(Array.isArray(myArr));
console.log(myArr);
  • dupArr.forEach(callback);
    dupArr을 순회하면서

  • if (!myArr.includes(element))
    myArr이 배열의 원소를 가지고 있지 않다면,

  • myArr.push(element)
    myArr에 배열의 원소를 집어 넣어줌.

참조 📚


https://hianna.tistory.com/422
https://developer.mozilla.org/ko/docs/Web/API/FormData/set

profile
RN App Developer

1개의 댓글

comment-user-thumbnail
2021년 7월 23일

오... 2번 방법은 처음으로 봤는데 감사합니다!!👍
사진이 누를 수 밖에 없네요.

답글 달기