JavaScript 배열 중복 제거 방법 요약
Array.prototype.unique1 = function () { var n = []; //一个新的临时数组 for (var i = 0; i < this.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if (n.indexOf(this[i]) == -1) n.push(this[i]); } return n; }; Array.prototype.unique2 = function() { var n = {},r=[]; //n为hash表,r为临时数组 for(var i = 0; i < this.length; i++) //遍历当前数组 { if (!n[this[i]]) //如果hash表中没有当前项 { n[this[i]] = true; //存入hash表 r.push(this[i]); //把当前数组的当前项push到临时数组里面 } } return r; }; Array.prototype.unique3 = function() { var n = [this[0]]; //结果数组 for(var i = 1; i < this.length; i++) //从第二项开始遍历 { //如果当前数组的第i项在当前数组中第一次出现的位置不是i, //那么表示第i项是重复的,忽略掉。否则存入结果数组 if (this.indexOf(this[i]) == i) n.push(this[i]); } return n; }; Array.prototype.unique4 = function() { this.sort(); var re=[this[0]]; for(var i = 1; i < this.length; i++) { if( this[i] !== re[re.length-1]) { re.push(this[i]); } } return re; }; var arr = [1,2,2,2,3,3,4,5]; console.log(arr.unique1()); // [1, 2, 3, 4, 5] console.log(arr.unique2()); // [1, 2, 3, 4, 5] console.log(arr.unique3()); // [1, 2, 3, 4, 5] console.log(arr.unique4()); // [1, 2, 3, 4, 5]
첫 번째와 세 번째 메서드는 모두 배열의 indexOf 메서드를 사용합니다. 이 방법의 목적은 배열에서 저장된 매개변수가 처음으로 나타나는 것을 찾는 것입니다. 분명히, js 엔진은 이 메소드를 구현할 때 대상을 찾을 때까지 배열을 탐색합니다. 그래서 이 기능은 시간을 많이 낭비하게 됩니다. 두 번째 방법은 해시 테이블을 사용합니다. 개체의 발생을 아래 첨자 형식으로 저장합니다. 첨자 참조는 indexOf를 사용하여 배열을 검색하는 것보다 훨씬 빠릅니다.
네 번째 방법의 아이디어는 배열을 먼저 정렬한 다음 인접한 두 값을 비교하는 것입니다. 정렬 시에는 JS 기본 정렬 방법을 사용합니다. JS 엔진은 내부적으로 빠른 정렬을 사용해야 합니다. 최종 테스트 결과, 이 방법의 실행 시간은 두 번째 방법에 비해 평균 3배 가량 길지만, 첫 번째와 세 번째 방법에 비해 훨씬 빠른 것으로 나타났다.
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.