標籤:tle 結果 dex reac alt 思路 對比 去掉 去重
隨著JavaScript提供文法的增多,數組去重方式也越來越多。現在從最原始的方式到最簡潔的方式,一步步進行剖析。
雙重迴圈
數組去重,不就是比較數組元素,去掉重複出現的麼。最原始的方式不正是雙重迴圈進行比較處理嘛
建立res數組存放返回結果;外層迴圈遍曆target中的每一個數組元素,內層迴圈將target中的數組元素與res數組中的每一個值進行對比,如果都不相同,則存放到res中。迴圈完成,返回去重後的數組。這種原始的方式具有良好的相容性。
indexof最佳化內層迴圈
在本栗中使用indexof最佳化內層迴圈。indexOf()方法返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1
使用了indexof方法,就不在需要內層迴圈,當然還有其他的方式可以最佳化內層迴圈了
javascript學習群:453833554
對象索引值對最佳化內層迴圈
對象的鍵不同重複,這個特性可以用來判斷重複元素
注意:由於對象的鍵都是字元,所以,無法區分 1 和 ‘1‘ ,所以需要再進行修改一下,存放時加上類型判斷。
加上了類型判斷, 1 對應為 Number1 , ‘1‘ 對應為 String1,即可正常區分開。
filter最佳化外層迴圈
在本栗中使用filter最佳化外層迴圈。filter() 方法建立一個新數組, 其包含通過所提供函數實現的測試的所有元素。
在target上直接進行過濾,如果是該元素第一次出現,則返回true,否則返回false;這樣filter新建立的數組中每個元素只會出現一次,達到了去重的目的。至此我們不再使用for迴圈,代碼量也減少了很多。
Set去重
ES6 提供了新的資料結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重複的值。這種特性用來數組去重,十分的方便。
‘...‘ 是ES6中的擴充運算子,此處的作用是將Set展開為用逗號隔開的參數序列 , 非常簡單的就實現了數組去重。不熟悉 ES6文法的童鞋們,先自行瞭解。如果再用上箭頭函數,真的是一句話就搞定了,如下:
至此,從雙重迴圈的十幾行代碼到最後 set+箭頭函數的一行搞定。從‘繁’到‘簡’都已經實現了數組的去重,代碼量減少的背後是對JavaScript方法的應用。其實核心思路沒變,實現的手段變了而已。
javascript學習群:453833554
Javascript從“繁”到“簡”進行數組去重