方法一:
Array.prototype.method1 = function(){ var arr=[]; //定義一個臨時數組 for(var i = 0; i < this.length; i++){ //循環遍歷當前數組 //判斷當前數組下標為i的元素是否已經保存到臨時數組 //如果已保存,則跳過,否則將此元素保存到臨時數組中 if(arr.indexOf(this[i]) == -1){ arr.push(this[i]); } } return arr; }
方法二:
Array.prototype.method2 = function(){ var h={}; //定義一個hash表 var arr=[]; //定義一個臨時數組 for(var i = 0; i < this.length; i++){ //循環遍歷當前數組 //對元素進行判斷,看是否已經存在表中,如果存在則跳過,否則存入臨時數組 if(!h[this[i]]){ //存入hash表 h[this[i]] = true; //把當前數組元素存入到臨時數組中 arr.push(this[i]); } } return arr; }
方法三:
Array.prototype.method3 = function(){ //直接定義結果數組 var arr=[] ; for(var i = 1; i < this.length; i++){ //從數組第二項開始循環遍歷此數組 //對元素進行判斷: //如果數組當前元素在此數組中第一次出現的位置不是i //那么我們可以判斷第i項元素是重復的,否則直接存入結果數組 if(this.indexOf(this[i]) == i){ arr.push(this[i]); } } return arr; }
方法四:
Array.prototype.method4 = function(){ //將數組進行排序 this.sort(); //定義結果數組 var arr=[]; for(var i = 1; i < this.length; i++){ //從數組第二項開始循環遍歷數組 //判斷相鄰兩個元素是否相等,如果相等說明數據重復,否則將元素寫入結果數組 if(this[i] !== arr[arr.length - 1]){ arr.push(this[i]); } } return arr; }
ext:
- var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
- alert(arr.method3());
方法五:
const set=new Set([1,2,3,4,4]); console.log([...set]);//[1,2,3,4]; //[...set]是一個擴展運算符,將一個數組轉為用逗號分隔的參數列表。
方法六:
function dedupe(array){ return Array.from(new Set(array)); //這里的 Array.from()方法是將兩類對象轉為真正的數組:類似數組的對象和可遍歷的對象(包括es6新增的數據結構Set和Map) }
dedupe([1,1,1,2,3]) //[1,2,3]