1:
Array.PRototype.fun1 = function(){ var arr = []; //一個(gè)新的臨時(shí)數(shù)組 for(var i = 0; i < this.length; i++) //遍歷當(dāng)前數(shù)組 { //如果當(dāng)前數(shù)組的第i已經(jīng)保存進(jìn)了臨時(shí)數(shù)組,那么跳過, //否則把當(dāng)前項(xiàng)push到臨時(shí)數(shù)組里面 if (arr.indexOf(this[i]) == -1) arr.push(this[i]); } return arr;}2:第二種方法遠(yuǎn)遠(yuǎn)快于其他兩種方法。 但是內(nèi)存占用方面應(yīng)該第二種方法比較多,因?yàn)槎嗔艘粋€(gè)hash表。這就是所謂的空間換時(shí)間。
Array.prototype.fun2 = function(){ var n = {}, r=[]; //n為hash表,r為臨時(shí)數(shù)組 for(var i = 0; i < this.length; i++){ //遍歷當(dāng)前數(shù)組 if (!n[this[i]]){ //如果hash表中沒有當(dāng)前項(xiàng) n[this[i]] = true; //存入hash表 r.push(this[i]); //把當(dāng)前數(shù)組的當(dāng)前項(xiàng)push到臨時(shí)數(shù)組里面 } } return r;}3:
Array.prototype.fun3 = function(){ var n = [this[0]]; //結(jié)果數(shù)組 for(var i = 1; i < this.length; i++){ //從第二項(xiàng)開始遍歷 //如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i, //那么表示第i項(xiàng)是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組 if (this.indexOf(this[i]) == i) n.push(this[i]); } return n;}4: 這個(gè)方法的思路是先把數(shù)組排序,然后比較相鄰的兩個(gè)值。 排序的時(shí)候用的JS原生的sort方法,JS引擎內(nèi)部應(yīng)該是用的快速排序吧。 最終測試的結(jié)果是此方法運(yùn)行時(shí)間平均是第二種方法的三倍左右,不過比第一種和第三種方法快了不少。
Array.prototype.fun4 = 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;}新聞熱點(diǎn)
疑難解答
圖片精選