1:
Array.PRototype.fun1 = function(){ var arr = []; //一個新的臨時數組 for(var i = 0; i < this.length; i++) //遍歷當前數組 { //如果當前數組的第i已經保存進了臨時數組,那么跳過, //否則把當前項push到臨時數組里面 if (arr.indexOf(this[i]) == -1) arr.push(this[i]); } return arr;}2:第二種方法遠遠快于其他兩種方法。 但是內存占用方面應該第二種方法比較多,因為多了一個hash表。這就是所謂的空間換時間。
Array.prototype.fun2 = 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;}3:
Array.prototype.fun3 = 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;}4: 這個方法的思路是先把數組排序,然后比較相鄰的兩個值。 排序的時候用的JS原生的sort方法,JS引擎內部應該是用的快速排序吧。 最終測試的結果是此方法運行時間平均是第二種方法的三倍左右,不過比第一種和第三種方法快了不少。
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;}新聞熱點
疑難解答