数组去重常用的七种方法(个人总结)
//实例数组
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)
这七种方法个人感觉比较容易想到,当然有的原理比较类似就是换了种方法。网上也有很多去重方法感觉大同小异,大家做个参考就好。