/* * 最基本的去重方法 * 思路:定義一個新數組,並存放原數組的第一個元素,而後將元素組一一和新數組的元素對比,若不一樣則存放在新數組中。 */ function unique(arr) { var resArr = [arr[0]]; for (var i = 1; i < arr.length; i++) { var repeat = false; for (var j = 0; j < resArr.length; j++) { if (arr[i] == resArr[j]) { repeat = true; break; } } !repeat && resArr.push(arr[i]); } return resArr; }
/* * 利用對象的屬性去重(推薦) * 思路:每次取出原數組的元素,而後在對象中訪問這個屬性,若是存在就說明重複 */ function unique(arr) { var resArr = []; var json = {}; for (var i = 0; i < arr.length; i++) { if (!json[arr[i]]) { resArr.push(arr[i]); json[arr[i]] = 1; } } console.log(json); return resArr; }
/* * 利用下標查詢 * 新建一新數組,遍歷傳入數組,值不在新數組就push進該新數組中 * IE8及其如下版本不支持數組的indexOf方法 */ function unique(array) { var temp = []; for (var i = 0; i < array.length; i++) { ( temp.indexOf(array[i]) == -1 ) && temp.push(array[i]); } return temp; }
/* * 排序後相鄰去除法 * 給傳入數組排序,排序後相同值相鄰, * 而後遍歷時,新數組只加入不與前一值重複的值。 * 會打亂原來數組的順序 */ function unique(array) { array.sort(); //數組在原數組上進行排序,不生成副本 var temp = [ array[0] ]; for (var i = 0; i < array.length; i++) { ( array[i] !== temp[temp.length - 1] ) && temp.push(array[i]); } return temp; }
/* * 實現思路:若是當前數組的第i項在當前數組中第一次出現的位置不是i, * 那麼表示第i項是重複的,忽略掉。不然存入結果數組。 * array.indexOf(item,start)方法可返回數組中某個指定的元素位置 */ function unique(array) { var temp = []; for (var i = 0; i < array.length; i++) { ( array.indexOf(array[i]) == i ) && temp.push(array[i]); } return temp; }
// ES6 let arr = [1,2,1,4,2,6,1,5]; let s = new Set(arr); let res = [...new Set(arr)];