js中Set和Map

Posted 94Lucky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]);  //获取每个元素的键和键值
}



以上是关于js中Set和Map的主要内容,如果未能解决你的问题,请参考以下文章

js中的Map和Set

js中Set和Map

js的Set和Map集合

JS map和set

js中map和set使用

JS中的Set,Map,Array查询速度比较:Set;Map;Array