zoukankan      html  css  js  c++  java
  • js中Set和Map

    js中除了有我们常见的五种数据结构,还有Set和Map两种数据类型。

    一.Set 无重复列表类型

    特点:
    1.没有下标,不是按照下标存储,但是是有序的,因此不能使用下标循环遍历
    2.没有重复元素,任何元素存在唯一性,因此可以用来作去重处理,存储不重复的数据,
    3.插入速度和删除速度非常快,遍历查找速度也非常快,但是略低于键值对类型。
    4.支持方法:add(添加)  delete(删除) has(查找) forEach(遍历)  
         属性: size 长度,只读的,没有length,
    

    2.使用方法:
    1)数组去重

    var arr=[1,3,5,7,2,4,3,5,1,2,6,5,7,8,9,1,2,4,3,5,7,9];
    arr=Array.from(new Set(arr));
    console.log(arr);
    

    2)存储数据(不能重复) 和数组对比

    //数组存储
              var manager={
                list:[],
                add(elem){
                    if(this.list.indexOf(elem)>-1) return;   //判断重复
                    this.list.push(elem);
                },
                remove(elem){
                    var index=this.list.indexOf(elem);
                    if(index<0) return;
                    this.list.splice(index,1);
                },
                update(){
                    for(var i=0;i<this.list.length;i++){
                        this.list[i].update();
                    }
                }
    
            }
    //Set存储    
               var manager={     
                list:new Set(),      //不需要进行存储
                add(elem){
                    this.list.add(elem);
                },
                remove(elem){
                    this.list.delete(elem);
                },
                update(){
                    for(let value of this.list){
                        value.update();
                    }
                }
    
            }
    //很明显在进行存储时比数组有优势
    

    3.遍历
    1)forEach

     var a=new Set([1,2,3,4,5]);
     a.forEach(function(value1,value2,a1){
     console.log(value1,value2,a1);    //相当于对象的key和value,只是set中的key和value相等
     }) 
    

    2)for of 按照元素遍历

    var a=new Set([1,2,3,4,5]);
    for(let value of a){
      console.log(value);
    }
    

    二.map 是一种有长度的键值对数据类型

    特点
    1.hashMap  键值对的数据类型   map对象是关联型的对象,类似php中关联型的数组结构
    2.具备数组的长度紧密型,又具备对象的键值对方法
    3.它的获取,删除,查询,遍历速度很快
    4.任何数据类型都可以作为键进行存储,对象存储用的是引用地址进行存储的
    

    支持方法

    var map=new Map();
    map.set("name","morty");   //1.添加元素
    map.set("age",27);
    map.delete("name");     //2.删除键名(删除元素)
    console.log(map)
    //map.clear();          //3.清除掉所有数据
    console.log(map.has("age")); //4.判断某个键是否存在   返回布尔值
    console.log(map.get("age")) //5.获取某个键的值   27
    console.log(map.values());// 6.获取所有值的列表   {"morty", 27}
    console.log(map.keys()); // 7.获取所有键的列表 {"name", "age"}
    

    遍历方法
    1.forEach

     map.forEach(function(value,key,map){   //键值   键  原对象
      console.log(value,key);
    })
    

    2.for of

    1)
    for(let key of map.keys()){   //遍历键
     console.log(key);
    }
    2)
    for(let value of map.values()){  //遍历键值
     console.log(value);
    }
    3)
    for(let arr of map.entries()){  //遍历每个元素  返回多个数组,每个元素一个数组
       console.log(arr);
    }
    for(let arr of map.entries()){  
      console.log(arr[0],arr[1]);  //获取每个元素的键和键值
    }
    
  • 相关阅读:
    expandablelistview学习在listView里面嵌套GridView
    App数据格式之解析Json
    不应和应该在SD卡应用应用
    9 个用来加速 HTML5 应用的方法
    Android设计模式系列-索引
    ObjectiveC语法快速参考
    App列表显示分组ListView
    进程、线程和协程的图解
    Python多进程原理与实现
    Python多线程的原理与实现
  • 原文地址:https://www.cnblogs.com/94-Lucky/p/13362600.html
Copyright © 2011-2022 走看看