다량의 배열 요소를 다룰때 중복데이터에 대한 처리는 생각보다 만만치가 않다.
이러한 중복값 처리에 필요한 요구가 다양하게 있겠지만, 가장 흔히 요구되는 기능 몇가지를 작성 하였다.
<script type="text/javascript">
// 테스트용 배열 선언
var arr1 = new Array();
var arr2 = new Array();
var arr3 = new Array();
// 배열요소의 중복제거 및 오름차순 정렬(속성형)
Array.prototype.unique = function() {
var a = {};
for (var i = 0; i < this.length; i++) {
if (typeof a[this[i]] == 'undefined') {
a[this[i]] = 1;
}
}
this.length = 0;
for (var i in a) {
this[this.length] = i;
}
return this;
};
arr1 = [3,3,4,4,5,6,6,7,7,7,8,9,9,9,2,1,1,0]; //무작위값 할당
alert(arr1.unique()); //결과: 0,1,2,3,4,5,6,7,8,9
// 배열요소의 중복제거 및 오름차순 정렬(함수형)
function uniqueArray(arr) {
var a = {};
for (var i = 0; i < arr.length; i++) {
if (typeof a[arr[i]] == 'undefined') {
a[arr[i]] = 1;
}
}
arr.length = 0;
for (var i in a) {
arr[arr.length] = i;
}
return arr;
}
alert(uniqueArray([1,4,2,2,3,4,5,5,5,7,6,6,9,0,8,8])); //결과: 0,1,2,3,4,5,6,7,8,9
// 배열요소의 중복만 제거해서 배열로 반환
function uniqArr(arr) {
var chk = [];
for (var i = 0; i < arr.length; i++) {
if (chk.length == 0) {
chk.push(arr[i]);
} else {
var flg = true;
for (var j = 0; j < chk.length; j++) {
if (chk[j] == arr[i]) {
flg = false;
break;
}
}
if (flg) {
chk.push(arr[i]);
}
}
}
return chk;
}
alert(uniqArr([9,8,8,1,1,2,2,3,4,5,5,6,7,0])); //결과: 9,8,1,2,3,4,5,6,7,0
// 2개 이상의 배열요소에서 중복이 아닌값만 배열로 반환 array_diff(arr1, arr2, ...)
function array_diff() {
var args = array_diff.arguments;
var T = args[0], arg, k, R = '', out = [];
var d = array_diff.delim;
for (k = 1; arg = args[k++];)
R += arg.join(d) + d;
for (k = 0; k < T.length; k++)
if (R.indexOf(T[k] + d) < 0)
out[out.length] = T[k];
return out;
}
array_diff.delim = '*'; //임시 구분자 지정
arr1 = [0,1,2,3,4,5,6,7,8,9];
arr2 = [2,3,5];
arr3 = [3,8,9];
alert(array_diff(arr1, arr2, arr3)); //결과: 0,1,4,6,7