ES6的set和map集合
1.set
set集合,本质上就是对数组的一种包装
var s = new Set([3,4,5,6,7]);
s.add(8)
s.add(8)
s.add("8")
s.add(8)
s.add("9")
s.add(9)
s.add(9)
s.add(1)
s.add(3)
console.log(s) //Set(10) {3, 4, 5, 6, 7, 8,"8","9",9,1,3}
console.log(s[0]) //undefined
console.log(s[1]) //undefined
console.log(s[2]) //undefined
console.log(s.length) //undefined
//适用for of能遍历出每个值
// for(var i of s){
// console.log(i) //3,4,5,6,7,8,"8","9",9,1,3
// }
//其实set集合本质上还是一个map,如下可知set只有值
for(var i of s.keys()){
console.log(i); //3,4,5,6,7
}
for(var i of s.values()){
console.log(i); //3,4,5,6,7
}
for(var i of s.entries()){
console.log(i); //[3, 3],[4, 4],[5, 5],[6, 6],[7, 7]
}
利用set去重
//方法一
var arr = [1,2,3,4,5,4,3,2,1,1,"1","2","3"];
console.log(arr); //[1, 2, 3, 4, 5, 4, 3, 2, 1, 1, "1", "2", "3"]
var s = new Set(arr);
console.log(s); //{1, 2, 3, 4, 5, …}
var newArr = [];
for(var i of s){
newArr.push(i)
}
console.log(newArr) //[1, 2, 3, 4, 5, "1", "2", "3"]
//方法二
var arr = [1,2,3,4,5,4,3,2,1,1,"1","2","3"];
var s = [...new Set(arr)];
console.log(s); //[1,2,3,4,5,"1","2","3"]
从上面可以看出set集合是默认去重的
,但前提是两个添加的元素严格相等 所以5和"5"不相等,两个new出来的字符串不相等
2.map
Map集合,即映射,添加一个值xx.set(“name”,“admin”),获取某一个元素 map.get(“name”); //admin
var m = new Map();
m.set("name","admin");
m.set("name","root");
m.set("age",16);
console.log(m) //{"name" => "root", "age" => 16},后者会把前者相同的覆盖
console.log(m.name) //undefined
console.log(m[name]) //undefined
console.log(m.get("name")) //root
for(var i of m){
console.log(i); //["name", "root"],["age", 16]
console.log(i[0]); //name,age
console.log(i[0]); //root,16
};
//取得key值
for(var i of m.keys()){
console.log(i); //name,age
}
//取得value值
for(var i of m.values()){
console.log(i); //root,16
}
//取得key值和value值
for(var i of m.entries()){
console.log(i); ["name", "root"],["age", 16]
}
另外map还可以将数字字符串数组转为 数字数组 (互换)
var arr = [1,2,3,4,5]
var arr1 = arr.map(String);
console.log(arr1) //["1", "2", "3", "4", "5"]
console.log(typeof arr1) //object
console.log(arr1.length) //5
console.log(arr1[0]) //1 string
console.log(arr1[3]) //4 string
var arr2 = arr1.map(Number);
console.log(arr2); //[1,2,3,4,5]
console.log(typeof arr2); //object
console.log(arr2.length) //5
console.log(arr2[0]) //1 number
console.log(arr2[3]) //4 number
3.set和map的区别
1.map的结构是键值对集合,set只有值
2.set结构是类似于数组结构,但是里面的值都是不允许重复的