我愛擼碼,擼碼使我感到快樂!
大家好,我是Counter。
今天來實現下,js中不同類型的無序數組去重,代碼都寫好了,基本都注釋了。今天先上代碼吧。
arr是我自己自定義的一個數組。這種去重的時間復雜度為O(n²),因為它進行了2次長度為n的循環。第一種代碼如下:
// 定義一個數組 var arr = [ 1, 2, 3, 4, 5, 3, 2, 5, 6, 7, 8, "1", {a: 1, b: 2}]; // 時間復雜度為O(n²); function one(arr) { // 定義一個空數組 var newArr = []; // 遍歷數組 for( key of arr) { // in -> 索引值,of -> 具體元素 // console.log(key); // 如果這個空數組里沒有這個元素的話,就給它添加上 if ( newArr.indexOf(key) === -1) { newArr.push(key); } } // 結果返回 return newArr; }
第一種方法的效果如下:
第二種方法,時間的復雜度為O(nlogN),因為它對數組進行排序了,這種方法會改變原有數組的排序。如果不在乎就沒事,如果在乎就不能使用這種方法。第二種代碼如下:
// 時間復雜度為O(nlogN),不過這查重會導致不會安裝原有的數組進行排序,即不穩定性,如果不在乎數組的排序,也可以,不影響,如果在乎就不行了 function two(arr) { // 創建空數組 var newArr = []; // 對數組排序 arr.sort(); // 遍歷數組 for( var i = 0; i < arr.length; i++) { // 如果當前的這個元素不等於下一個元素 if ( arr[i] !== arr[i+1] ) { // 那么將這個元素插入到新數組 newArr.push(arr[i]); } } return newArr; }
第二種效果如下:
第三種方法,運用到了ES6的集合對象,時間復雜度為O(n)。
第三種代碼給出:
// 時間復雜度為O(n) ,利用ES6里的Set集合對象,它返回的是一個集合,不重復的 function three(arr) { // 創建一個集合對象 var set = new Set(arr); // 把集合再傳回去,再轉成數組 return Array.from(set); }
第三種效果如下: