跳转到内容

数组去重

刀刀

3/20/2025

0 字

0 分钟

Map记录

首先先看代码:

js
function mapArray(arr) {
    const newArr = []
    arr.reduce((pre, next) => {
        // 判断新的这一项数据是否在map对象内(pre为map对象累计值)
        if(!pre.has(next)) {
            pre.set(next)
            newArr.push(next)
        }
        return pre // 无论有没有添加数据,都把最新的map对象返回出去
    }, new Map())
    return newArr
}

下面进行逐行解析:

  1. 定义一个新的数组
  2. 通过数组的 reduce 遍历每一项,初始值设为 Mapreduce 方法不仅用于做累加,还能通过其累计值判断其是否存在
  3. 如果值不存在于 Map 对象中,则把值添加进去,并添加到数组中
  4. 返回新的累计值
  5. 循环结束后把新数组返回

知识点

  • Map

    Map 对象的 key 是唯一的,不可重复的,其 set() 方法可以往 Map 对象内添加值,get() 方法可以获取值,has() 方法可以判断 Map 对象中是否存在该 key 值。

  • reduce

    接收两个参数,参数1为回调函数,参数2为初始值。本案例中,初始值为 Map 对象。回调函数也接收多个参数,参数1为累计值,在一开始时该值为初始值,即 Map 对象,参数2为当前循环项。

Set去重

js
function setArray(arr) {
    return Array.from(new Set(arr))
    // 或
    return [...new Set(arr)]
}