Map
map是一组键值结构,类似JSON
var map = new Map([["user",'小处'],["num",99]])
map.set('u','哈')
console.log(map)
// Map(3) {'user' => '小处', 'num' => 99, 'u' => '哈'}
map的key不仅可以是字符串还可以是对象
var obj = {name:"小如",age:99}
let map = new Map()
map.set(obj,"111")
console.log(map)
//key : {name: '小如', age: 99}
//value : "111"
Map常用语法
//初始化map需要一个二维数组或者一个空map
let map = new Map()
// 添加key或者value值
map.set('zhangsan','男')
map.set('lisi','女')
// 是否存在key,true or false
map.has("zhangsan")//true
map.has("wangwu")//false
// 根据key获取value
map.get("zhangsan")//男
// 删除key为zhangsan的value
map.delete("zhangsan")
map中一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值覆盖掉
var map = new Map()
map.set("zhangsan",'男')
map.set("zhangsan",'女')
console.log(map)//Map(1) {'zhangsan' => '女'}
Set
Set对象类似数组,且成员的值都是唯一的
var set = new Set([1,2,3,4,55])
Set最常见的用法是用来去重
var arr = [1,2,3,4,5,2,3,4,5]
var arr2 = [...new Set(arr)]
console.log(arr2)//[1, 2, 3, 4, 5]
Set常用语法
// 初始化一个Set,需要一个Array数组,要么空Set
var set = new Set([1,2,3,4,5,6])
// 添加元素
set.add(7)
// 删除元素
set.delete(3)
// 检测元素
set.has(6)
Map和Set的区别
-
a、这两种方法都有很快的查找速度
-
var lng = 100 let arr = new Array(lng).fill(2) let set = new Set() let map = new Map() for(var i = 0;i<lng;i++){ arr[i]=i set.add(i) map.set(i,arr[i]) } console.log(arr) console.log(set) console.log(map) //Array console.time() for(var j = 0;j<lng;j++){ arr.includes(j) } console.timeEnd() //set console.time() for(var j = 0;j<lng;j++){ set.has(j) } console.timeEnd() //map console.time() for(var j = 0;j<lng;j++){ map.has(j) } console.timeEnd() // default: 0.011962890625 ms // default: 0.007080078125 ms // default: 0.013916015625 ms
-
b、初始化需要的值不一样,Map需要一个二维数组或者一个空Map,Set需要一个数组或者一个空Set
-
c、Map和Set都不允许键值重复
-
d、Map的键值是不能修改的,但是键对应的值是可以修改的;Set不能通过迭代器来改变Set的值,因为Set的值就是键。
-
e、Map是键值对的存在,值也不作为键;而Set没有value只有key,value就是key