把去重後的結果放在一個臨時數組中, 對原來數組的元素與臨時數組元素比較, 臨時數組中不存在這個元素的, 放入臨時數組。javascript
function unique (arr) { if (!Array.isArray(arr)) return arr; var result = []; arr.map(function (item) { if (result.indexOf(item) == -1) { result.push(item); } }) return result; }
建立一個新的數組存放結果, 和一個空的對象。for循環時, 每次取出一個元素與對象進行對比, 若是這個元素不重複, 則把它存放到結果數組中, 同時把這個元素的內容做爲一個對象的屬性, 並賦值, 存入對象中。java
function unique (arr) { if (!Array.isArray(arr)) return arr; var result = []; var obj = {} arr.map(function (item) { if (!obj[item]) { result.push(item); obj[item] = 1 }; }) return result; }
先把數組排序, 而後比較相鄰的兩個值。排序的時候用原生的 sort 方法, JS引擎內部使用的是快速排序。數組
function unique(arr) { if (!Array.isArray(arr)) return arr; if (arr.length < 2) return arr; arr.sort(); // sort在元數組進行排序, 不生成副本 var result = [arr[0]] arr.map(function (item, index, arr) { if (index > 0) { if (item !== arr[index - 1]) { result.push(item); } } }) return result; } var arr = [99, 88, 22, 22, 44, 88, 99, '99'] console.log(unique(arr));
Set對象: 它是ES6新增的有序列表集合, 不會包含重複項。code
Array.from()方法: 將一個類數組或可遍歷對象轉換成真正的數組。對象
function unique (arr) { if (!Array.isArray(arr)) return arr; if (arr.length < 2) return arr; return Array.from(new Set(arr)) } var arr = [99, 88, 22, 22, 44, 88, 99, '99'] console.log(unique(arr));
function unique(arr) { if (!Array.isArray(arr)) return arr; if (arr.length < 2) return arr; return arr.filter(function(item, index, arr) { if (arr.indexOf(item) === index) { return true; } }); } var arr = [99, 88, 22, 22, 44, 88, 99, '99'] console.log(unique(arr));