중복 가능성 :
자바 스크립트 배열에서 중복 값을 찾는 가장 쉬운 방법
배열에 중복 된 값이 있는지 어떻게 확인합니까?
배열의 일부 요소가 동일하면 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 에는 JSON을 지원하는 브라우저가 필요하거나그렇지 않은 경우 JSON 라이브러리 가 필요합니다.
2 편집 : 이제 함수를 사용하여 간단한 검사를하거나 중복 값의 배열을 반환 할 수 있습니다.
답변
글쎄, 나는 당신을 위해 인터넷에서 약간의 검색을했고이 편리한 링크를 찾았습니다.
JavaScript 배열에서 중복 값을 찾는 가장 쉬운 방법
위의 링크에 제공된 샘플 코드를 “swilliams”에 따라 솔루션에 적용 할 수 있습니다.