思路:es6
/** * 【1】2個for循環去重 * * @param {any} arr * @returns [1, 2, 13, 3, "1", "2"] */ function unique1(arr) { //返回數組 var arr2 = []; for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr2.length; j++) { //返回數組和操做數組的值相等,結束循環,此時的j值恰好和返回數組的長度相等 if (arr2[j] === arr[i]) { break; } } //返回數組和j值相等,則插入該值 if (arr2.length === j) { arr2.push(arr[i]); } } return arr2; }
思路:數組
/** * 【2】indexOf數組去重 * * @param {any} arr * @returns [1, 2, 13, 3, "1", "2"] */ function unique2(arr) { //返回的數組 var arr2 = []; for (var i = 0; i < arr.length; i++) { //判斷arr2中是否存在arr[i]值,存在不做任何操做,不存在插入該值 if (arr2.indexOf(arr[i], 0) === -1) { arr2.push(arr[i]); } } return arr2; }
思路:優化
/** * 【3】filter去重【filter返回一個新數組】 * * @param {any} arr * @returns [1, 2, 13, 3, "1", "2"] */ function unique3(arr) { return arr.filter(function(item, index, arr) { //若是當前元素在原數組中的第一個索引等於當前索引值,則返回當前元素 return arr.indexOf(item, 0) === index; }); }
思路:spa
/** * 【4】先排序後去重 * * @param {any} arr * @returns ["1", 1, 13, "2", 2, 3] */ function unique4(arr) { //數組排序 var arr = arr.sort(); //結果數組 var arr2 = []; for (var i = 0; i < arr.length; i++) { //第一個數組或者先一個數組值不等於當前數組值,插入該元素 if (i < 1 || arr[i - 1] !== arr[i]) { arr2.push(arr[i]); } } return arr2; }
思路:思路就是對第三和第四種方法的結合啦,道理同樣。code
/** * 【5】sort+filter優化【4】方法 * * @param {any} arr * @returns ["1", 1, 13, "2", 2, 3] */ function unique5(arr) { return arr.sort().filter(function(item, index, arr) { return item < 1 || arr[index - 1] !== arr[index]; }); }
思路:這種方法主要是利用對象 hasOwnProperty 判斷是否存在對象屬性對象
/** * 【6】hasOwnProperty【利用:hasWonProperty判斷對象中是否存在對應屬性,存在返回true不然返回false】 * * @param {any} arr * @returns [1, 2, 13, 3] */ function unique6(arr) { //建立對象 var obj = {}; return arr.filter(function(item, index, arr) { //判斷對象是否存在元素,存在給對象賦值,不然返回false return obj.hasOwnProperty(item) ? false : (obj[item] = item); }); }
思路:利用【new Set(數組)說明:它時一個類數組方法,可是其成員值都是惟一的;Array.from()能夠蔣其餘對象轉化爲數組】排序
/** * 【7】es6的new set() * * @param {any} arr * @returns [1, 2, 13, 3, "1", "2"] */ function unique7(arr) { return Array.from(new Set(arr)); }
/** * 【8】蔣【7】採用...操做符重寫 * * @param {any} arr * @returns [1, 2, 13, 3, "1", "2"] */ function unique(arr) { return [...new Set(arr)]; }
好了,寫完後驗證一下是否正確:索引
window.onload = function() { var arr = [1, 2, 13, 1, 2, 3, '1', '2']; console.log(unique(arr)); };
上面的每一個方法的返回值就是調用當前方法時,返回值。it