標籤:
JavaScript中關於數組去重複的方式很多,下面匯總了常見的幾種實現方式。
1 /*實現一:基於原型擴充*/ 2 Array.prototype.removeDuplicate = function() { 3 var arrObj = {}, 4 newArr = [], 5 len = this.length; 6 for(var i = 0; i < len; i++) { 7 var value = this[i], 8 type = (typeof value) + value; 9 if(arrObj[type] === undefined) {10 newArr.push(value);11 arrObj[type] = len;12 }13 }14 return newArr;15 }16 17 var s = [1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7];18 s.removeDuplicate(); //[1, 2, 3, 4, 5, 6, 7]19 20 /*實現二:去除重複後數組為字串*/21 var removeDuplicate = function(array) {22 array = array || [];23 var arrObj = {},24 len = array.length;25 for(var i = 0; i < len; i++) {26 var data = array[i];27 if(typeof(arrObj[data]) === ‘undefined‘) {28 arrObj[data] = 1;29 }30 }31 array.length = 0;32 for(var arr in arrObj) {33 array[array.length] = arr;34 }35 return array;36 }37 38 var s = [1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7];39 removeDuplicate(s); //["1", "2", "3", "4", "5", "6", "7"]40 41 /*實現三:去除重複後數組為數字*/42 var removeDuplicate = function(array) {43 var str = [];44 for(var i = 0, len = array.length; i < len; i++) {45 !RegExp(array[i], ‘g‘).test(str.join(‘,‘)) && (str.push(array[i]));46 }47 return str;48 }49 50 var s = [1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7];51 removeDuplicate(s); //[1, 2, 3, 4, 5, 6, 7]52 53 /*實現四:hashtable的結構記錄已有的元素,這樣就可以避免內層迴圈*/54 var removeDuplicate = function(array) {55 var hash = {},56 newArr = [];57 for(var i = 0, elem; (elem = array[i]) != null; i++) {58 if(!hash[elem]) {59 newArr.push(elem);60 hash[elem] = true;61 }62 }63 return newArr;64 }65 66 var s = [1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7];67 removeDuplicate(s); //[1, 2, 3, 4, 5, 6, 7]
上面四種實現方式中,都實現了數組去重複的需求,但在實現方式和效能上面存在一定的差異,其中實現四的方式效率最高。
javascript中數組去重複方式匯總