方式一:通过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]