indexOf(), filter() 이용해 배열의 중복 제거

YJ·2023년 1월 15일
0

indexOf() 함수는 배열에서 특정 값이 처음 나타나는 index를 return한다.

const arr = [1, 3, 3, 5, 8, 1, 7];

arr.indexOf(1);   //  0 (index number)
arr.indexOf(3);   //  1 
arr.indexOf(5);   //  3
arr.indexOf(8);   //  4
arr.indexOf(7);   //  6

그러므로, 위의 배열에서 숫자 1은 arr[5]의 값으로도 존재하지만 arr.indexOf(1)의 값은 절대 5가 나올 수 없다.

그렇다면, arr의 index 값이 arr.indexOf(element) 와 같지 않다면 그 element는 배열 안에서 중복되고 있는 것이다.

arr.indexOf(element) !== index    --->  중복된 요소

arr.indexOf(element) === index    --->  중복되지 않은 요소

filter() 함수는 filter안의 callback 함수에 정의한 부분에 대해 true로 반환되는 부분만 배열로 반환한다.

중복되지 않은 요소만 즉, arr.indexOf(element) === index 가 true 인 요소만 배열로 반환하려고 한다.

const arrOnly = arr.filter((element, index) => {
  return arr.indexOf(element) === index;
})

전체 과정을 함수로 적어보면 아래와 같다.

function func(arr) {
  const arrOnly = arr.filter((element, index) => {
    return arr.indexOf(element) === index;
  })
  return arrOnly;
}

func(arr);
console.log(func(arr));
profile
Hello

0개의 댓글