set:类似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。我们可以利用这一唯一特性进行数组的去重工作。
单一数组的去重:
let set = new Set([1, 2, 2, 3, 4, 3, 5]) console.log(set) //Set(5) {1, 2, 3, 4, 5} console.log(set.size)//5 set没有length属性 要用size属性
多数组的合并去重:不会进行数据类型的转换
let arr1 = [1, 2, 3, 4, '5'] let arr2 = [2, 3, 4, 5, 6] let set7 = new Set([...arr1, ...arr2]) console.log(set7) //Set(6) {1, 2, 3, 4, '5', 5, 6}
向set中添加元素:
let set1 = new Set() set1.add(1) set1.add(2) set1.add(3) console.log('added:', set1)//Set(3) {1, 2, 3}
set中删除元素:
let set1 = new Set([1,2,3,4,5]) set1.delete(1) console.log('deleted:', set1)//Set(4) {2, 3, 4, 5}
set中清除所有元素:
let set1 = new Set([1,2,3,4,5]) set1.clear() console.log(set1)//Set(0) {}
set中判断某元素是否存在:
let set = new Set([1,2,3,4,5]) console.log( set.has(1))//true console.log( set.has(8))//false
遍历set:
let arr=['add','delete','clear','has']; let list=new Set(arr); let str = str1 = '0'; for(let key of list){ str += key + ' '; } console.log(str)//add delete clear has list.forEach(function(item){ str1 += item + ' '; }) console.log(str1)//add delete clear has
Set和Array互转:
let arr = [1,2,3,4,5]; //数组转set let set = new Set(arr) console.log(set)//Set(5) {1, 2, 3, 4, 5} //set转数组有两种方案: console.log([...set]) console.log( Array.from(set))
map特性:
1.键值对,键可以是任何数据类型包括对象。
let map = new Map() let objkey = {p1: 'v1'} map.set(objkey, 'hello')//添加 console.log(map)//Map(1) { {p1: "v1"} => "hello" } console.log(map.get(objkey))//hello
2.Map可以接受数组作为参数,数组成员还是一个数组,其中有两个元素,一个表示键一个表示值。
let map = new Map([ ['name', 'Aissen'], ['age', 12] ]) console.log(map);//Map(2) {"name" => "Aissen", "age" => 12}
map的属性和方法:
let map = new Map([ ['name','小明'], ['age',16], ['hobby','打游戏'] ]) console.log(map) //Map(3) {"name" => "小明", "age" => 16, "hobby" => "打游戏"} console.log(map.size)// 3 获取map的长度 用size map没有length属性 console.log(map.get('hobby'))//打游戏 //判断是否存在指定的键 console.log(map.has('hobby')) // true console.log(map.has('hello')) // false //添加 修改 map.set('sex','男') console.log(map) // Map(4) {"name" => "小明", "age" => 16, "hobby" => "打游戏", "sex" => "男"} //删除 map.delete('hobby') console.log(map)//Map(3) {"name" => "小明", "age" => 16, "sex" => "男"} //清空所有数据 map.clear() console.log(map) //Map(0) {}
遍历map:
let map = new Map([ ['name','小明'], ['age',16], ['hobby','打游戏'] ]) for(let key of map.keys()){ console.log(key) //各遍历出map的键名 name age hobby } for(let value of map.values()){ console.log(value) //各遍历出map的键值 小明 16 打游戏 } for(let [key,value] of map.entries()){ console.log(key,value)//各遍历出map的键值对 name 小明 | age 16 | hobby 打游戏 }
map和其他数据类型互转:
和数组的互转:
let map = new Map([ ['name','小明'], ['age',16], ['hobby','打游戏'] ]) let arr = [...map]; console.log(arr)//转成二维数组 [ ["name", "小明"], ["age", 16], ["hobby", "打游戏"] ] let map1 = new Map(arr) console.log(map1)//Map(3) {"name" => "小明", "age" => 16, "hobby" => "打游戏"}
和Object的互转:
let map = new Map([ ['name','小明'], ['age',16], ['hobby','打游戏'] ]) let obj = {}; for (let [k,v] of map) { obj[k] = v; } console.log(obj) //{name: "小明", age: 16, hobby: "打游戏"} let map1 = new Map(); for(let key in obj){ map1.set(key,obj[key]) } console.log(map1)//Map(3) {"name" => "小明", "age" => 16, "hobby" => "打游戏"}