Development Tip

Javascript에서 배열에 중복 값이 ​​있는지 어떻게 확인합니까?

yourdevel 2020. 11. 16. 22:16
반응형

Javascript에서 배열에 중복 값이 ​​있는지 어떻게 확인합니까?


중복 가능성 :
자바 스크립트 배열에서 중복 값을 찾는 가장 쉬운 방법

배열에 중복 값이 ​​있는지 어떻게 확인합니까?

배열의 일부 요소가 동일하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

['hello','goodbye','hey'] //return false because no duplicates exist
['hello','goodbye','hello'] // return true because duplicates exist

중복을 찾는 데 신경 쓰지 않고 배열에 중복이 포함되어 있는지 여부에 관계없이 부울 결과 만 원합니다.


ES2015 환경 (이 글 작성 시점 : io.js, IE11, Chrome, Firefox, WebKit nightly)이있는 경우 다음이 작동하고 빠릅니다 (즉, O (n)).

function hasDuplicates(array) {
    return (new Set(array)).size !== array.length;
}

배열에 문자열 값만 필요한 경우 다음이 작동합니다.

function hasDuplicates(array) {
    var valuesSoFar = Object.create(null);
    for (var i = 0; i < array.length; ++i) {
        var value = array[i];
        if (value in valuesSoFar) {
            return true;
        }
        valuesSoFar[value] = true;
    }
    return false;
}

우리는 valuesSoFar지금까지 배열에서 본 값이 키인 "해시 테이블"을 사용합니다 . in해당 값이 이미 발견되었는지 확인 하기 위해을 사용하여 조회합니다 . 그렇다면 우리는 루프에서 벗어나을 반환 true합니다.


문자열 값 이상으로 작동하는 함수가 필요한 경우 다음이 작동하지만 성능은 떨어집니다. O (n ) 대신 O (n 2 )입니다.

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

차이점은 valuesSoFar자바 스크립트 "해시 테이블"(즉, 객체)에는 문자열 키만 있기 때문에에 해시 테이블 대신 배열을 사용한다는 것 입니다. 즉,의 O (1) 조회 시간을 잃고 in대신 O (n) 조회 시간을 얻습니다 indexOf.


(또한 어레이 내의 객체 / 배열 요소들에 대한 또 다른 접근법 1 )이 될 수있는 2 :

function chkDuplicates(arr,justCheck){
  var len = arr.length, tmp = {}, arrtmp = arr.slice(), dupes = [];
  arrtmp.sort();
  while(len--){
   var val = arrtmp[len];
   if (/nul|nan|infini/i.test(String(val))){
     val = String(val);
    }
    if (tmp[JSON.stringify(val)]){
       if (justCheck) {return true;}
       dupes.push(val);
    }
    tmp[JSON.stringify(val)] = true;
  }
  return justCheck ? false : dupes.length ? dupes : null;
}
//usages
chkDuplicates([1,2,3,4,5],true);                           //=> false
chkDuplicates([1,2,3,4,5,9,10,5,1,2],true);                //=> true
chkDuplicates([{a:1,b:2},1,2,3,4,{a:1,b:2},[1,2,3]],true); //=> true
chkDuplicates([null,1,2,3,4,{a:1,b:2},NaN],true);          //=> false
chkDuplicates([1,2,3,4,5,1,2]);                            //=> [1,2]
chkDuplicates([1,2,3,4,5]);                                //=> null

See also...

1 needs a browser that supports JSON, or a JSON library if not.
2 edit: function can now be used for simple check or to return an array of duplicate values


Well I did a bit of searching around the internet for you and I found this handy link.

Easiest way to find duplicate values in a JavaScript array

You can adapt the sample code that is provided in the above link, courtesy of "swilliams" to your solution.

참고URL : https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values

반응형