数组去重的一种思路

320 阅读2分钟

引言:

数组去重的方法有很多种,本文首先简单列举几个例子,然后主要记录一种数组去重的思想。

数组去重方法

本节列出的方法都将借用js中数组的一些方法去实现。

1. 利用ES6 Set数据结构

我们知道Set是ES6新提出的一种集合数据结构,其特点是元素是唯一的,因此我们可以利用这一特点对数组进行去重

let arr = [1, 1, 2, 2, 2, 3, 4, 5, 5, 6]
let array = [...new Set(arr)]
console.log(array)    //[1, 2, 3, 4, 5, 6]

2. 利用includes方法

includes表示数组/字符串中是否包含某个元素

/**
 * 利用includes实现数组去重
 * @param arr 传入的数组
 */
function unique(arr){
    let array = []
    for(let i = 0; i< arr.length; i++){
        if(!array.includes(arr[i])){
            array.push(arr[i])
        }
    }
    return array
}
unique([1, 1, 2, 2, 2, 3, 4, 5, 5, 6])
// 以上方法也可以实现数组的去重

3. 利用find方法

/**
 * 利用find实现数组去重
 * @param arr 传入的数组
 */
function unique(arr){
    let array = []
    for(let i = 0; i< arr.length; i++){
        if(!array.find(v =>{
            return v === arr[i]
        })){
            array.push(arr[i])
        }
    }
    return array
}
unique([1, 1, 2, 2, 2, 3, 4, 5, 5, 6])

利用对象去重

在这里,主要介绍下利用对象实现对数组的去重。JS中,对象属性的键值是不能重复的,我们可以利用这一特性,来实现对数组的去重,上代码,代码比较简单,应该都可以理解:

/**
 * 利用对象实现数组去重
 * @param arr 传入的数组
 */
function unique(arr){
    let array = []
    let obj = {}
    for(let i = 0; i< arr.length; i++){
        if(!obj.hasOwnProperty(arr[i])){    //对象中没有这个key值时,将其添加进去,同时给目标数组推入一个元素
            obj[arr[i]] = i
            array.push(arr[i])
        }
    }
    return array
}
unique([1, 1, 2, 2, 2, 3, 4, 5, 5, 6])

经过测试,打印出来的数组为[1, 2, 3, 4, 5, 6],上面的方法也可以实现对数组的去重。