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
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.
'Development Tip' 카테고리의 다른 글
데이터베이스에 파일을 저장하고 바이트 배열로 변환 하시겠습니까? (0) | 2020.11.16 |
---|---|
Xcode 4에서 .xcconfig 파일을 어떻게 사용할 수 있습니까? (0) | 2020.11.16 |
인 텐트를 통해 SMS 보내기 (0) | 2020.11.16 |
html 요소에 첨부 된 이벤트를 어떻게 볼 수 있습니까? (0) | 2020.11.16 |
iOS Safari / Chrome / Firefox에서 클릭 한 링크에서 회색 배경 제거 (0) | 2020.11.16 |