때로는 이러한 종류의 요구 사항이 발생하며 배열에서 중복 요소를 삭제하고 하나만 유지해야합니다. 떠오르는 첫 번째 방법은 루프를 사용하여 중복 요소를 비교하고 제거하는 것입니다. 코드는 다음과 같습니다.
방법 1 : 방법 1
코드 사본은 다음과 같습니다.
Array.prototype.distinct = function () {
var arr = [],
len = this.length;
for (var i = 0; i <len; i ++) {
for (var j = i+1; j <len; j ++) {
if (this [i] === this [j]) {
j = ++ i;
}
}
arr.push (이 [i]);
}
반환 ARR;
};
사용법 1 더 많은 데이터에 직면하면 성능이 훨씬 나빠집니다. 그런 다음 다음 방법을 계속보십시오.
방법 2 : 방법 2.
코드 사본은 다음과 같습니다.
Array.prototype.distinct = function () {
var self = this,
arr = self.concat (). sort (); // 새 배열을 만들고 정렬합니다
arr.sort (function (a, b) {
if (a === b) {
var n = self.indexof (a); // 인덱스 값을 얻습니다
self.splice (n, 1);
}
});
반환 자아;
};
방법 2는 정렬의 사용자 정의 콜백 함수를 사용하고 IE6/7/8에서 지원하지 않는 메소드 인 indexof를 사용합니다. 물론, Indexof는 그 자체로 시뮬레이션 될 수 있지만 더 큰 문제는 IE6/7/8의 정렬 방법과 표준 브라우저 사이에 차이가 있다는 것입니다. IE6/7/8의 정렬 메소드를 사용하는 사용자 정의 콜백 기능에는 많은 트랩이 있습니다. 위의 사용자 정의 정렬 콜백 함수의 코드는 IE6/7/8에서 "누락 된 숫자"오류를 직접보고합니다. 콜백 함수가 NAN을 반환하면이 오류는 이론적으로 정렬 콜백 함수가 정수 만 반환 할 수 있으므로보고됩니다. 반환 값이 무시 되더라도 여전히 다른 문제가 있으며 결국에는 너무 많은 문제가 없습니다. 방법 2는 IE6/7/8에서 작동하지 않습니다.
바보의 부두에서 여기에 그의 코드가 있습니다.
코드 사본은 다음과 같습니다.
Array.prototype.delrepeat = function () {
var newArray = [];
var provisionAltable = {};
for (var i = 0, item; (item = this [i])! = null; i ++) {
if (! provisionAltable [item]) {
newArray.push (항목);
ProcisionAltable [item] = true;
}
}
NewArray를 반환하십시오.
};
방법 3은 임시 객체를 사용하여 배열의 요소를 저장합니다. 중복 배열 요소가 발생하면 무시됩니다. 그러나 다음 배열이 발생하면 다음과 같습니다.
코드 사본은 다음과 같습니다.
var arr = [ 'firefox', 1, '1'];
위의 배열이 방법 3에서 사용되는 경우, 실수로 1 및 "1"을 중복 요소로 삭제하므로 방법 3의 약간의 수정을 해결할 수 있습니다.
방법 3의 수정 된 버전 :
코드 사본은 다음과 같습니다.
Array.prototype.distinct = function () {
var arr = [],
obj = {},
i = 0,
len = this.length,
결과;
for (; i <len; i ++) {
결과 =이 [i];
if (obj [result]! == result) {
arr.push (결과);
obj [결과] = 결과;
}
}
반환 ARR;
};
나중에 나는 바보 같은 기사의 끝에서 댓글을 읽었습니다. 이 방법은 Rekey가 제공하는 방법과 동일하지만이 방법에는 버그도 있습니다. 그런 2B 배열을 만나면 괜찮을 것입니다.
코드 사본은 다음과 같습니다.
var arr = [ 'firefox', 1, '1', 1];
위의 배열은 방법 3으로 수정되며 마지막 3 요소는 삭제되지 않습니다. 그러나 이런 종류의 배열은 약간 극단적입니다. 문자 그대로의 크기와 문자열 수를 가진 데이터를 만나면이 버그를 피하기 위해 미리 처리해야합니다. 임시 객체를 사용하는 방법은 표준 브라우저에서 정렬보다 약간 빠르며 정렬 방법의 알고리즘은 각 브라우저에서도 달라야합니다.