首先數組去重有不少方法,這裏看見幾個特別好的。es6
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9]; function unArray (Arr) { var newArr = []; for (var i = 0; i < Arr.length; i++) { if (newArr.indexOf(Arr[i]) == -1){//檢測newArr數組裏是否包含Arr數組的內容,==-1檢索的字符串沒有出現則爲-1 newArr.push(Arr[i])//把Arr數組的第i項插入新數組 } }; return newArr; } unArray(Arr); 做者:臭臭臭魁 連接:https://www.jianshu.com/p/a042f4dc0d75 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
第一個方法,用了indexof的特性,判斷數組中是否有此元素。最開始數組是空的,而後添加進去元素,當第二次遇到元素判斷數組裏面有沒有,沒有的話才添加進去。算法
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9]; function unArray (Arr) { var newArr = [Arr[0]]; for (var i = 0; i < Arr.length; i++) { if (Arr.indexOf(Arr[i]) == i){//檢測Arr數組第一次出現的位置是i newArr.push(Arr[i])//把Arr數組的第i項插入新數組newArr } }; return newArr;//返回新數組newArr } unArray(Arr); //console.log(unArray(Arr)); 做者:臭臭臭魁 連接:https://www.jianshu.com/p/a042f4dc0d75 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
第二種方法,indexof是判斷他首次出現的index。i是天然增加的,若是不出現重複的字符那麼每一次都能推一個元素到新數組中。一個字符對應一個他首次出現的位置,i是變得傳進去的東西也在變。當第二次傳相同的字符進去,和i不一樣因此就不行了。數組
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9]; function unArray (Arr) { var newArr = [],hash = {};//hash位hash表 for (var i = 0; i < Arr.length; i++) { if (!hash[Arr[i]]){//若是hash表裏沒有第i項則 hash[Arr[i]] = true;//把第i項插入到hash表裏 newArr.push(Arr[i])//把Arr數組的第i項插入新數組。此方法的時間消耗長,內存消耗大; } }; return newArr; } unArray(Arr); 做者:臭臭臭魁 連接:https://www.jianshu.com/p/a042f4dc0d75 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
這是種哈希算法,看不懂,就這樣吧。this
Array.prototype.distinct = function(){ var arr = this, result = [], i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] === arr[j]){ j = ++i; } } result.push(arr[i]); } return result; } var arra = [1,2,3,4,4,1,1,2,1,1,1]; arra.distinct(); //返回[3,4,2,1]
這是雙循環去重,spa
var arr = [1,2,3,3,4,5,5]; var set = new Set(arr); var newArr = Array.from(set);
這是es6去重,有點簡單粗暴。prototype
function unique3(arr){ var res = []; var obj = {}; for(var i=0; i<arr.length; i++){ if( !obj[arr[i]] ){ obj[arr[i]] = 1; res.push(arr[i]); } } return res; }
這種也比較簡單,總得來講簡單的方法,就是循環遍歷一遍。而後藉助其餘方法完成。code