方式一:通过Set

// 借助Set实现数组去重
const arr = [2,3,5,6,8,6,8,2,9];

const unique = [...new Set(arr)]
console.log(unique); // [2,3,5,6,8,9]

方式二:通过对象


首先让待去重的数组的每个元素在对象中key和value相等,如果已经存在的情况下,通过splice对数组进行删除,此时需要注意下标的变化。


// 通过对象实现数组去重
const arr = [2,3,5,6,8,6,8,2,9];
const obj = {};

for (let i = 0; i < arr.length; i++) {
const item = arr[i]
if (obj[item]) {
arr.splice(i,1);
i--;
} else {
obj[item] = item
}
}
console.log(arr); // [2,3,5,6,8,9]

方式三:利用indexOf和-1的关系进行遍历

// 利用indexOf和-1的关系实现数组去重
const arr = [2,3,5,6,8,6,8,2,9];

const res = [];
arr.forEach(item => {
if (res.indexOf(item) === -1) {
res.push(item);
}
})
console.log(res); // [2,3,5,6,8,9]

方式四:利用filter和indexOf的关系

// 利用filter和indexOf结合
const arr = [2,3,5,6,8,6,8,2,9];
const unique = arr.filter((item,index) => {
return arr.indexOf(item) === index
})
console.log(unique); // [2,3,5,6,8,9]

方式五:利用sort + splice

// 利用sort + splice
const arr = [2,3,5,6,8,6,8,2,9];

arr.sort((next,pre) => next - pre);

for (let i = 0;i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
arr.splice(i,1);
i--;
}
}
console.log(arr); // [2,3,5,6,8,9]

方式六:借助Map

// 借助Map
const arr = [2,3,5,6,8,6,8,2,9];
const map = new Map();
const unique = [];

for (let v of arr) {
if (!map.has(v)) {
map.set(v,true);
unique.push(v)
}
}
console.log(unique); //[2,3,5,6,8,9]

方式七:借助reduce + includes

// 借助reduce + includes
const arr = [2,3,5,6,8,6,8,2,9];

const unique = arr.reduce((pre,cur) => {
return pre.includes(cur) ? pre : [...pre,cur]
},[])

console.log(unique); // [2,3,5,6,8,9]

复杂数据类型的数组去重借助JSON.stringify

// 复杂数据类型借助 JSON.stringify
const arr = [2,3,5,6,8,6,8,[7],[7],2,9];
const unique = [];
arr.forEach(item => {
let flag = false;
unique.forEach(item1 => {
if (JSON.stringify(item1) === JSON.stringify(item)) {
flag = true;
}
})
if (!flag) {
unique.push(item);
}
})
console.log(unique); // [2,3,5,6,8,[7],9]