• JavaScript中数组去重、对象去重的方法


    ES6提供了新的数据结构:Set 和 Map,在写去重代码时方便了很多人,可以用更少的代码去实现去重。

    这两者都是构造函数,需要通过new去生成。

    这两者的区别就是:Set类似于数组,Map类似于对象

    数组去重

    const array = [1, 2, 3, 4, 5, 5, 5, 5]
    
    const set = new Set(array)
    const result = [...set] // Array.from(set)
    
    // 简写
    const result = [...new Set(array)] // Array.from(new Set(array))

    除此之外,数组去重方式还有:

    1. 两个for循环遍历比较,需要使用两个变量,搭配splice

    2. indexOf / lastIndexOf / includes

      2.1 搭配for循环,存入新数组

      2.2 搭配filter,返回新数组

    3. 利用对象,那么同时也可以利用Map

    4. ……

    对象去重(对象数组去重)

    关键代码:

    function unique(arr) {
      const res = new Map()
      return arr.filter((arr) => !res.has(arr.key) && res.set(arr.key, 1))
    }

    例子:

    var arr = [
      {
        key: 111,
        value: 111,
      },
      {
        key: 111,
        value: 222,
      },
      {
        key: 222,
        value: 333,
      },
      {
        key: 333,
        value: 444,
      },
    ]
    function unique(arr) {
      const res = new Map()
      return arr.filter((arr) => !res.has(arr.key) && res.set(arr.key, 1))
    }
    var temArr1 = unique(arr)
    console.log(temArr1)

    得到的结果:

    [

      {key: 111, value: 111},

      {key: 222, value: 333},

      {key: 333, value: 444},

    ]

    如果想要以后添加的数据为最新内容,只需要将数组翻转即可:

    var temArr2 = unique(arr.reverse()).reverse()
    console.log(temArr2)

    得到的结果:

    [

      {key: 111, value: 222},

      {key: 222, value: 333},

      {key: 333, value: 444},

    ]

    除此之外,数组去重方式还有:

    1. Map可以实现,那么当然对象也可以实现(通过判断key)

    2. 两个for循环遍历比较

      2.1 通过标识符来添加到新数组中

      2.2 使用两个变量,搭配splice

    3. ……

    欢迎补充!欢迎纠正!

  • 相关阅读:
    SecureCRT 连接 虚拟机Linux 命令
    如何使用secureCRT连接vmware中的虚拟主机?
    SecureCRT8.1+SecureCRT_keygen完成注册
    常用python机器学习库总结
    Torch7在Ubuntu下的安装与配置
    朴素贝叶斯算法 & 应用实例
    编写MR代码中,JAVA注意事项
    march.
    Docker CentOS 7.2镜像systemd问题解决办法
    Docker 基础命令 简要入门
  • 原文地址:https://www.cnblogs.com/hiuman/p/13890795.html
Copyright © 2020-2023  润新知