其實(shí)網(wǎng)上搜索這些方法一堆堆的,之所以還來寫一遍主要是因爲(wèi)自己習(xí)慣一種之後就忘了其他方法怎麼實(shí)現(xiàn),就寫一寫總結(jié)一下,順便做個(gè)測(cè)試看看哪個(gè)效率最高,爲(wèi)了更好展示效果,我會(huì)先總結(jié)認(rèn)爲(wèi)比較好的方法,後面統(tǒng)一測(cè)試。(溫馨提示:下文衹是爲(wèi)了簡(jiǎn)便,一般情況下不建議寫在原型上,容易污染全局)
一,通過尋找對(duì)象屬性
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());二,通過尋找數(shù)組位置
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());三,跟尋找數(shù)組位置類似,搜索數(shù)字第一次出現(xiàn)的位置是不是跟當(dāng)前位置一樣
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());四,比較常規(guī),先排序,再比較前後兩個(gè)數(shù)字是不是相等
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());接下來是網(wǎng)上比較少的效率比較了,也是本文重點(diǎn),我們先生成一個(gè)計(jì)時(shí)函數(shù)統(tǒng)一比較
首先生成一個(gè)一百數(shù)字的數(shù)組
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('本次函數(shù)運(yùn)行花了:' + (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);
新聞熱點(diǎn)
疑難解答
圖片精選