JavaScript数组去重你都知道那些?
1.利用set
去重
const arr=[10,20,30,10,20,15,30,40]
const newArr=[... new Set(arr)]
console.log(newArr)
2.利用every
去重
思路 : 遍历数组,如果没有这个元素就添加到新数组中
const arr = [10, 20, 30, 10, 20, 15, 30, 40]
const newArr = []
arr.forEach(item => {
if (newArr.every(index => index!=item)) {
newArr.push(item)
}
})
console.log(newArr)
3.利用排序
去重
思路: 先把数组按照从大到小或者从小到大的顺序排列,然后利用第一个元素与下一个元素对比,如果相同就进行对比,如果不相同就添加到一个新数组中
const arr = [10, 20, 30, 10, 20, 15, 30, 40]
const arr1 = arr.sort((a, b) => a - b)
const newArr = []
for (let index = 0; index < arr1.length; index++) {
if (arr1[index] !== arr1[index + 1]) {
newArr.push(arr1[index])
}
}
console.log(newArr)
4.利用对象属性名唯一
的特性去重
思路: 遍历数组,让数组的元素作为对象的属性名,利用是对象的属性名的唯一性去重相同的元素
const arr = [10, 20, 30, 10, 20, 15, 30, 40]
const obj = {}
//因为对象的属性名不能重复
arr.forEach(item => {
obj[item] = 1
})
console.log(Object.keys(obj))
5.利用splice
去重
function fn(arr) {
let i,j,len = arr.length;
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
len--;
j--;
}
}
}
return arr;
}