我们以前学过的数据格式如 数组,json,在ES6中新增了两种数据结构:Set和Map数据格式
set数据格式
一、set数据结构:类似数组但不能有重复的值
let set=new Set(["a","b","c",]);
//set.add() 往set里面添加一项
set.add("d");
set.add("d").add("e").add("f");
//set.delete(); //删除一项
set.delete("b");
//set.has();判断有没有这个值,返回true或false
set.has("b"); //false
//set.size 属性,返回长度,类似length属性
//set.clear();清空
二、循环
let set1=new Set(["a","b","c","d"]);
// for..of
for (let item of set1.values()){console.log(item); }
for (let item of set1.keys()){console.log(item); }
for(let item of set1.entries()){console.log(item);}
for(let [k,v] of set1.entries()){console.log(k,v);}
//forEach()
set1.forEach((value,index)=>{
console.log(value,index);
});
三、数组去重
let arr=[1,2,3,1,3,3,4,5,6];
let newArr=[...new Set(arr)]; //返回(6) [1, 2, 3, 4, 5, 6] 是数组
let set3=new Set(arr); //返回Set(6){1, 2, 3, 4, 5, …} 是set数据格式
console.log("----------------------------");
console.log(set3[0]); //undefine,因为返回的不是数组
console.log(newArr[0]); //返回正确值1
Map数据格式
一、初始化
var map=new Map([["lina","lee"],["alen","xiao"],["name","wang"]]);
方法
//map.set(key,value) 设置key所对应的键值,然后返回整个Map结构,key,value可以是任何类型
map.set("lina","li"); //["lina","li"],["alen","xiao"] 如果key存在,重新赋值
map.set("age","18"); //["lina","li"],["alen","xiao"],["age","18"] 如果key不存在,则添加一项
//map.get(key) 读取key对应的值,如果找不到key,返回undefined
map.get("alen"); // li
//map.has(key) 返回一个boolean值,表示某个key是否存在于Map数据结构中
map.has("lina"); //true
//map.delete(key) 删除某个键,返回true,如果删除失败返回false
map.delete("lina"); //true
二、遍历的方法
//map.keys() 返回键名的遍历器
map.keys(); //MapIterator {"name", "age"}
//map.values(); 返回键值的遍历器
map.values(); // MapIterator {"wang", "18"}
//map.entries() 返回所有的键和其对应的值
map.entries(); //MapIterator {"name" => "wang", "age" => "18"}
//map.forEach()
三、与其他数据结构的相互转换
//转对象
function mapToObject(str) {
let obj=Object.create(null);
for(let [k,v] of str){
obj[k]=v;
}
return obj;
}
let myMap=new Map().set("name","lina").set("age","23");
mapToObject(myMap);