數組去重常用的七種方法(個人總結)
//實例數組
var arr = [12, 10, 32, 54, 21, 12, 10, 54]
法一 利用對象屬性不會重復的原理 將數組的每一項變成對象的屬性 然后查詢對象屬性 沒有 就添加進新數組
var obj = {} var brr = [] for (var i = 0; i < arr.length; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1 brr.push(arr[i]) } else { obj[arr[i]] += 1 } } console.log(obj)//可以看到數組元素以及重復的個數 console.log(brr)//去重之后的數組
法二 利用sort()將重復的放一起 然后使用splice()刪掉重復的元素
arr.sort(function (a, b) { return a - b }) for (var i = 0; i < arr.length; i++) { if (arr[i] == arr[i + 1]) { arr.splice(i, 1) i-- } } console.log(arr)
法三 雙循環遍歷數組 重復的刪掉 注意刪除元素之后 要改變下標 es5常用
for (var i = 0; i < arr.length - 1; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { arr.splice(j, 1) j-- } } } console.log(arr)
法四 利用forEach()遍歷數組 用indexOf()判斷是否在新數組 不在就在新數組添加元素
var brr = [] arr.forEach(function (item) { if (brr.indexOf(item) == -1) { brr.push(item) } }) console.log(brr)
法五 利用forEach()遍歷數組 用includes()判斷是否在新數組 不在就在新數組添加元素 原理與法四類似
var brr = [] arr.forEach(function (item) { if (!brr.includes(item)) { brr.push(item) } }) console.log(brr)
法六 利用Set結構不會有重復元素的原理 以及...運算符 es6
var brr = [...new Set(arr)] console.log(brr)
法七 利用Set結構不會有重復元素的原理 以及Array.from()方法 與法六原理類似
var brr = Array.from(new Set(arr)) console.log(brr)
這七種方法個人感覺比較容易想到,當然有的原理比較類似就是換了種方法。網上也有很多去重方法感覺大同小異,大家做個參考就好。