1.利用 new Set() 去重
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let unique= [...new Set(arr)]; // ...展开运算符
// let unique= Array.from(new Set(arr)); // 也可用Array.from()
console.log(unique); // [1, 2, 3, 4, 7, 9];
2.forEach() 和 indexOf()
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let unique = [];
arr.forEach(item => {
if (unique.indexOf(item) === -1) {
unique.push(item);
}
});
console.log(unique); // [1, 2, 3, 4, 7, 9]
3.filter() 和 indexOf()
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let unique = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(unique); // [1, 2, 3, 4, 7, 9]
4.reduce() 和 Array.includes()结合
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let unique = arr.reduce((pre, item) => (pre.includes(item) ? pre : [...pre, item]), []);
console.log(unique); // [1, 2, 3, 4, 7, 9]
5.利用对象属性的唯一特性
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let obj = {
};
arr.forEach(item => (obj[item] = "123"));
let unique = Object.keys(obj).map(item => parseInt(item));
// let unique = Object.keys(obj).map(item => ~~item); // 别人看不懂写法
console.log(unique); // [1, 2, 3, 4, 7, 9]
6.利用两层for循环
原理:判断元素的是否相同,相同则跳出内层循环进入外层循环,不相同则把元素添加到unique数组中
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let unique = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) i++;
}
unique.push(arr[i]);
}
console.log(unique); // [1, 2, 3, 4, 7, 9]
7.排序数组去重
原理: 对数组进行排序(排序后相邻的元素会紧挨在一起),然后比较相邻元素是否相同,相同扔掉;反之,添加到unique数组中
let arr = [1, 2, 2, 3, 4, 7, 9, 9];
let unique = [];
let temp = arr.sort();
for (let i = 0; i < temp.length; i++) {
if (temp[i] !== temp[i + 1]) unique.push(arr[i]);
}
console.log(unique); // [1, 2, 3, 4, 7, 9]