JavaScript: 배열에 중복 값이 ​​있는지 확인하는 방법

4081 단어 tutorialjavascript
원래 게시됨Will's blog


JavaScript에서 값 배열을 처리할 때 배열에 중복 값이 ​​포함되어 있는지 확인하고 싶을 때가 있습니다. 불행히도 JavaScript 배열은 우리를 위해 이것을 할 수 있는 내장 메소드를 노출하지 않습니다. 우리가 직접 구현을 작성해야 합니다.

이 문제에 대한 한 가지 접근 방식은 다음과 같습니다.

function checkForDuplicates(array) {
  let valuesAlreadySeen = []

  for (let i = 0; i < array.length; i++) {
    let value = array[i]
    if (valuesAlreadySeen.indexOf(value) !== -1) {
      return true
    }
    valuesAlreadySeen.push(value)
  }
  return false
}

이것은 작동하지만 배열의 끝에서 유일한 중복 값이 ​​발생하는 최악의 시나리오에서는 성능이 뛰어난 접근 방식이 아닙니다. 우리는 배열에 실제로 고유하지 않은 값이 있다는 것을 마지막 요소에서 깨닫기 위해서만 전체 배열(매우 클 수 있음)을 반복해야 합니다.

최근에 배운 또 다른 접근 방식은 ES6 세트의 힘을 활용하는 것입니다.

JavaScript의 Sets에 익숙하지 않은 경우 (최근까지 몰랐습니다!), here is the MDN definition :

Set objects are collections of values. You can iterate through the elements of a set in insertion order. A value in the Set may only occur once; it is unique in the Set's collection.



마지막 줄을 한 번 더 읽으십시오. 이것이 우리의 비밀 소스입니다. 'Set의 값은 한 번만 발생할 수 있습니다. Set 의 컬렉션에서 유일합니다.'

이 사실은 원래 배열을 Set로 변환한 다음 고유한 값만 포함한다고 확신할 수 있음을 의미합니다. 배열에서 고유한 값을 모두 추출하여 Set 에 저장하면 배열과 Set의 길이를 비교할 수 있습니다. 길이가 같지 않으면 배열에 중복 값이 ​​포함되어 있어야 합니다!

그 접근 방식은 다음과 같습니다.

function checkForDuplicates(array) {
  return new Set(array).size !== array.length
}
Set 길이와 배열이 같지 않으면 이 함수는 true 를 반환하여 배열에 중복 항목이 포함되어 있음을 나타냅니다. 그렇지 않고 배열과 Set 길이가 같은 경우 함수는 false를 반환하고 원래 배열에 중복 값이 ​​포함되어 있지 않음을 확신할 수 있습니다!

나는 이 두 번째 접근 방식이 얼마나 간결하고 표현력이 좋은지 정말 좋아하지만you might run into browser support issues if you need to target older browsers 이를 고려하십시오!

좋은 웹페이지 즐겨찾기