JavaScript陣列去重的N種方法
對於陣列去重我們有n種方法可以實現。
es5實現方法
for迴圈+indexOf function unique(arr) { var uniqueArr = [], len = arr.length for (var i = 0; i < len; i++) { if (uniqueArr.indexOf(arr[i]) == -1) { uniqueArr.push(arr[i]) } } return uniqueArr } var arr = [1, 2, 3, 1, 5, "1"] var uniqueArr = unique(arr) console.log(arr)//[1, 2, 3, 1, 5, "1"] console.log(uniqueArr)//[ 1, 2, 3, 5, '1' ]
排序後去重
前端全棧學習交流圈:866109386,面向1-3經驗年前端開發人員,幫助突破技術瓶頸,提升思維能力
群內有大量PDF可供自取,更有乾貨實戰專案視訊進群免費領取。
function unique(arr) { var uniqueArr = [], sortArr = arr.concat().sort(), len = sortArr.length, prev for (var i = 0; i < len; i++) { if (!i || prev !== sortArr[i]) { uniqueArr.push(sortArr[i]) } prev = sortArr[i] } return uniqueArr } var arr = [1, 2, 3, 1, 5, "1"] var uniqueArr = unique(arr) console.log(arr)//[ 1, 2, 3, 1, 5, '1' ] console.log(uniqueArr)//[ 1, '1', 2, 3, 5 ] 利用物件 function unique(arr) { var uniqueArr = [], obj = {}, len = arr.length for (var i = 0; i < len; i++) { obj[typeof arr[i] + arr[i]] = arr[i] } for (var i in obj) { uniqueArr.push(obj[i]) } console.log(obj)//{ number1: 1, number2: 2, number3: 3, number5: 5, string1: '1' } return uniqueArr } var arr = [1, 2, 3, 1, 5, "1"] var uniqueArr = unique(arr) console.log(arr)// [1, 2, 3, 1, 5, "1"] console.log(uniqueArr)//[ 1, 2, 3, 5, '1' ]
前端全棧學習交流圈:866109386,面向1-3經驗年前端開發人員,幫助突破技術瓶頸,提升思維能力
群內有大量PDF可供自取,更有乾貨實戰專案視訊進群免費領取。
es6實現方法
利用Set結構和Array.from function unique(arr) { return Array.from(new Set(arr)) } var arr = [1, 2, 3, 1, 5, "1"] var uniqueArr = unique(arr) console.log(arr)//[ 1, 2, 3, 1, 5, '1' ] console.log(uniqueArr)//[ 1, 2, 3, 5, '1' ] 利用Set結構和... function unique(arr) { return [...new Set(arr)] } var arr = [1, 2, 3, 1, 5, "1"] var uniqueArr = unique(arr) console.log(arr)//[ 1, 2, 3, 1, 5, '1' ] console.log(uniqueArr)//[ 1, 2, 3, 5, '1' ]
陣列常用方法
- slice() 用於提取目標陣列的一部分,返回一個新陣列,原陣列不變。
- concat() 用於多個數組的合併。它將新陣列的成員,新增到原陣列成員的後部,然後返回一個新陣列,原陣列不變。
- reverse() 用於顛倒排列陣列元素,返回改變後的陣列。注意,該方法將改變原陣列。
- sort() 對陣列成員進行排序,預設是按照字典順序排序。排序後,原陣列將被改變。
- push() 用於在陣列的末端新增一個或多個元素,並返回新增新元素後的陣列長度。注意,該方法會改變原陣列。
- pop() 用於刪除陣列的最後一個元素,並返回該元素。注意,該方法會改變原陣列。
- unshift() 用於在陣列的第一個位置新增元素,並返回新增新元素後的陣列長度。注意,該方法會改變原陣列。
- shift() 用於刪除陣列的第一個元素,並返回該元素。注意,該方法會改變原陣列。
- splice() 用於刪除原陣列的一部分成員,並可以在刪除的位置新增新的陣列成員,返回值是被刪除的元素。注意,該方法會改變原陣列。
- map() 將陣列的所有成員依次傳入引數函式,然後把每一次的執行結果組成一個新陣列返回。
- forEach() 與map方法很相似,也是對陣列的所有成員依次執行引數函式。但是,forEach方法不返回值,只用來操作資料。
- filter() 用於過濾陣列成員,滿足條件的成員組成一個新陣列返回。
- join() 以指定引數作為分隔符,將所有陣列成員連線為一個字串返回。如果不提供引數,預設用逗號分隔。
- indexOf() 返回給定元素在陣列中第一次出現的位置,如果沒有出現則返回-1。
- lastIndexOf() 返回給定元素在陣列中最後一次出現的位置,如果沒有出現則返回-1。