例:let arr = [0,0,1,1,1,2,3,4,5];
1.数组的filter方法
let result = arr.filter((item, index, self) => {
return index === self.indexOf(item)
})
2.es6 Set数据结构
let result = [...new Set(arr)]
3.es6 Map数据结构
const result = [];
const map = new Map();
for (let v of arr) {
if (!map.has(v)) {
map.set(v, true);
result.push(v);
}
}
4.循环遍历数组
定义一个空数组,再循环需要去重的数组,不包含的就push进去,最终得到一个去重的数组
let result = [];
arr.forEach(item => {
if (!result.includes(item)) {
result.push(item)
}
})
5.排序好的数组用双指针法,一个在前一个在后
var removeDuplicates = function(arr) {
if (arr.length === 0) return 0;
var i = 0;
for(var j=1;j<arr.length; j++) {
if (arr[i] !==arr[j]) {
i++;
arr[i] = arr[j]
}
}
return i+1;
};
6.reduce方法去重
//对象数组去重
//根据数组每一项某个属性去重
const arr = [
{ id: 1, a: 1 },
{ id: 2, a: 2 },
{ id: 3, a: 3 },
{ id: 1, a: 4 },
];
const result = arr.reduce((pre, cur) => {
const ids = pre.map(item => item.id);
return ids.includes(cur.id) ? pre : [...pre, cur];
}, []);
//基本类型值数组去重
let result = arr.reduce((pre, cur) => {
if (pre.includes(cur)) {
return pre
}
return pre.concat(cur)
}, [])