• 数组去重


    Map基础梳理

    JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
    例如Map构造函数接受一个数组作为其参数:

    const map = new Map([
      [1, '网通'],
      [2, '电信']
    ]);
    // 0:{1 => "网通"}
    // 1:{2 => "电信"}
    

    Map实例的属性和操作方法:

    • size:返回成员总数
    • set(key, value):添加新的键值
    • get(key):读取键对应的值
    • has(key):是否有某个键
    • delete(key):删除某个键
    • clear():清空

    Map实例的遍历方法:

    • keys():返回键名的遍历器。
    • values():返回键值的遍历器。
    • entries():返回键值对的遍历器。
    • forEach():遍历 Map 的所有成员。

    数组去重(Map):

    去重前:[1,5,2,3,4,2,3,1,3,4]
    去重后:[1,5,2,3,4]
    主要思路:创建一个空Map,遍历原始数组,把数组的每一个元素作为key存到Map中,因为Map中不会出现相同的key值,所以最终得到的Map中的所有key值就是去重后的结果。

    function unique(arr) {
      let hashMap = new Map();
      let result = new Array();  // 数组用于返回结果
      for (let i = 0; i < arr.length; i++) {
        if(hashMap.has(arr[i])) { // 判断 hashMap 中是否已有该 key 值
          hashMap.set(arr[i], true);  // 后面的true 代表该 key 值在原始数组中重复了,false反之
        } else {  // 如果 hashMap 中没有该 key 值,添加
          hashMap.set(arr[i], false);  
          result.push(arr[i]);
        }
      } 
      return result;
    }
    
    let arr = [1,5,2,3,4,2,3,1,3,4];
    console.log(unique(arr)); // [1,5,2,3,4]
    
    **************************************************************
    
    
    unique = (array) => {
      let map = new Map();
      let result = []
      for (let i = 0; i < array.length; i++) {
        if(map.has(array[i])) { // 判断 map 中是否已有该 key 
          continue
        } else {  // 如果 map 中没有该 key,就加入 result 中
          map.set(array[i], true);  
          result.push(array[i]);
        }
      } 
      return result;
    }
    

    缺点:API 太新,旧浏览器不支持。

    Set:代码最少

    function unique (arr) {
      return Array.from(new Set(arr))
    }
    let arr = [1,5,2,3,4,2,3,1,3,4];
    console.log(unique(arr))
     //[1,5,2,3,4]
    
    let arr = [1,5,2,3,4,2,3,1,3,4];
    [...new Set(arr)]
    //[1,5,2,3,4]
    

    缺点:API 太新,旧浏览器不支持。

    借鉴计数排序的原理

    unique = (array) => {
        const hash = []
        for(let i=0;i<array.length; i++){
            hash[array[i]] = true
        }
        const result = []
        for(let k in hash){
            result.push(k)
        }
        return result
    }
    

    缺点:只支持数字或者字符串数组,如果数组里面有对象,比如 array = [{number:1}, 2],就会出错。

    作者:过程是风景
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Mongodb在window上启动
    java:JQuery(Ajax,JSON)
    SqlServer:SqlServer(sql,游标,定时作业,行转列,列转行,公用表达式递归,merge合并)
    java:WebService
    java:svn
    java:Echarts,POI
    java:LeakFilling(Other)
    java:activiti(工作流简介 )
    Linux:lvm磁盘分区,动态扩容
    java:dubbo
  • 原文地址:https://www.cnblogs.com/justcho/p/13472708.html
Copyright © 2020-2023  润新知