数组去重的七种方法?

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]

猜你喜欢

转载自blog.csdn.net/qq_53509791/article/details/130924802