掌握JS数组去重方法,处理重复数据能力加1

Set 数据结构与解构赋值

Set数据结构是ES6中引入的一种新的数据结构,Set 中的元素只会出现一次,即 Set 中的元素是唯一的。先将数组转化为Set数据结构,然后再转回数组即可去重。

let arr = [1, 2, 3, 3, ];
let uArr = [...new Set(arr)];
console.log(uArr); 
// [1, 2, 3]

Set 数据结构与 Array.from

上述可知,Set数据结构中的元素是唯一的,Array.from 可以将 Set 数据结构转换成数组,因此先用 Set 数据结构进行去重,然后再将结果转化成数组类型。

let arr = [1, 2, 3, 3, ];
let uArr = Array.from(new Set(arr));
console.log(uArr); 
// [1, 2, 3]

indexOf() 和 filter

通过 indexOf 判断当前元素第一次出现的位置是否与其所在的位置相同,如果不相同,则证明元素重复。

let arr = [1, 2, 3, 3];
let uArr=arr.filter((i,in,arr)=>{
    
    
  return arr.indexOf(i) === in;
});
console.log(uArr); 
// [1, 2, 3]

includes

遍历数组,通过 includes 判断元素是否在新数组中,如果不在新数组中,则添加到新数组中。

let arr = [1, 2, 3, 3];
let uArr = []
for(let item of arr) {
    
    
  if(!uArr.includes(item)) {
    
    
    uArr.push(item)
  }
}
console.log(uArr)
// [1, 2, 3]

reduce 和 对象属性

使用reduce()方法遍历数组,将每个元素作为对象的属性名,如果对象中没有该属性,则将该元素作为属性名添加到对象中,最后返回对象中的所有属性名。

let arr = ['1', '2', '3', '3'];
let obj = {
    
    }
arr.reduce((prev, cur) => {
    
    
  if(!obj[cur]) {
    
    
    obj[cur] = true
  }
},[])
let uArr = Object.keys(obj)
console.log(uArr)
// [1, 2, 3]

用对象属性去重要注意的是,将属性赋值给对象时,会被强制转化为字符串。举个栗子,如果数组中含有数字,会被强制转化为字符串,导致去重的结果不可靠。因此用对象属性进行去重的方法,比较适合对字符串数组的去重。

相邻元素去重

在一个只有数字的数组中,对数组中的数字进行排序,如果相邻的元素相等,则证明存在重复元素。

let arr = [1, 3, 1, 2, 3];
let uArr = []
arr.sort()
for(let i = 0; i < arr.length; i++) {
    
    
  if(arr[i] !== arr[i- 1]) {
    
    
    uArr.push(arr[i])
  }
}
console.log(uArr)

猜你喜欢

转载自blog.csdn.net/qq_42816270/article/details/129172835