其實網上搜索這些方法一堆堆的,之所以還來寫一遍主要是因爲自己習慣一種之後就忘了其他方法怎麽實現,就寫一寫總結一下,順便做個測試看看哪個效率最高,爲了更好展示效果,我會先總結認爲比較好的方法,後面統一測試。(溫馨提示:下文衹是爲了簡便,一般情況下不建議寫在原型上,容易污染全局)
一,通過尋找對象屬性
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique1 = function(){ var obj = {}, ary = [], i= 0, len = this.length; for(; i<len; i++){ if(!obj[this[i]]){ obj[this[i]] = 1; ary.push(this[i]); } } return ary.sort(function(a,b){return a - b});}console.log(n.unique1());
二,通過尋找數組位置
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique2 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(ary.indexOf(this[i]) == -1) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}console.log(n.unique2());
三,跟尋找數組位置類似,搜索數字第一次出現的位置是不是跟當前位置一樣
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique3 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this.indexOf(this[i]) == i) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}console.log(n.unique3());
四,比較常規,先排序,再比較前後兩個數字是不是相等
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique4 = function(){ this.sort(function(a,b){return a - b}); var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this[i] !== this[i-1]) ary.push(this[i]); } return ary;}console.log(n.unique4());
接下來是網上比較少的效率比較了,也是本文重點,我們先生成一個計時函數統一比較
首先生成一個一百數字的數組
Array.prototype.unique1 = function(){ var obj = {}, ary = [], i= 0, len = this.length; for(; i<len; i++){ if(!obj[this[i]]){ obj[this[i]] = 1; ary.push(this[i]); } } return ary.sort(function(a,b){return a - b});}Array.prototype.unique2 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(ary.indexOf(this[i]) == -1) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}Array.prototype.unique3 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this.indexOf(this[i]) == i) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}Array.prototype.unique4 = function(){ this.sort(function(a,b){return a - b}); var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this[i] !== this[i-1]) ary.push(this[i]); } return ary;}function randomAry (n) { var ary = [],i=0; for(; i<n; i++){ ary.push(Math.ceil(Math.random()*10000)); } console.log(ary) return ary;}function useTime (fn) { var start = new Date(); fn(); var end = new Date(); console.log('本次函數運行花了:' + (end - start) + '毫秒');}var ary = randomAry(100), fn1 = function(){ ary.unique1() }, fn2 = function(){ ary.unique2() }, fn3 = function(){ ary.unique3() }, fn4 = function(){ ary.unique4() };useTime(fn1);useTime(fn2);useTime(fn3);useTime(fn4);
新闻热点
疑难解答
图片精选