js 羣中有人問數組如何去重,激發一陣熱烈討論。javascript
若是是在 powershell 中,那就簡單了,直接調用 get-unique 方法便可。java
在 js 中,又如何來處理數組去重呢?shell
下面談談我對此問題的理解。數組
---------------------------------------------測試
一種思路是利用數組的 indexOf 方法(用 lastindexOf 應該也能夠),此方法會檢測傳入 indexOf 方法中的值,是否在數組中出現過,如未找到,是返回值 -1 ,由此來判斷。spa
var arr = [0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1]; var arr1 = ["red", "green", "blue", "red", "purple", "maroon", "green", "yellow", "blue","red"]; //利用數組的indexOf方法 function getUnique(arr) { //用數組字面量聲明一個空數組,將做爲去重後的結果返回 var result = []; //利用for遍歷傳入的測試數組,檢測數組中的每一個值是否已出如今結果數組中 //返回 -1 ,則代表無,隨即調用數組的 push 方法把此值壓入結果數組中 for (var i = 0; i < arr.length; i += 1) { if (result.indexOf(arr[i]) == -1) { result.push(arr[i]); } } return result; } alert(getUnique(arr)); alert(getUnique(arr1));
---------------------code
另外一思路,則是利用對象特性輔助去重對象
//藉助 js 對象特性爲輔助去重 function getUniquer1(arr) { //用數組字面量聲明一個空數組,將做爲去重後的結果返回 var result = []; //用對象字面量聲明一個空對象,做爲輔助判斷當前數組值是否爲重複 var aux = {}; for (var i = 0; i < arr.length; i += 1) { if (!aux[arr[i]]) { //最關鍵!判斷對象中名爲 arr[i] 的屬性值是否爲 false! result.push(arr[i]); //調用push方法,把值壓入結果數組中 aux[arr[i]] = 1; //重要!給對象中名爲 arr[i]的屬性賦值! } } return result; } alert(getUniquer1(arr)); alert(getUniquer1(arr1));
--------------------------------------------------------華麗的分割線--------------------------------------------blog
兩種思路,高下立判:ip
前者調用 indexOf 方法,每次均需遍歷整個數組,設想下,數組中有 10000 項,所耗費時間之大,不可想象。