ES6 提供了新的数据结构 Set, 它类似于数组, 但是成员的值都是唯一的, 没有重复的值.
Set 本身是一个数据结构, 用来生成 Set 数据结构.
- const s = new Set();
- [2,3,5,4,5,2,2,2].forEach(x=>s.add(x));
- for(let i of s) {
- console.log(i);
- } // 2 3 5 4
Set 函数可以接受一个数组作为参数
可以利用去除数组重复成员的方法.
[...new Set(array)] // 去除数组重复变量成员
Set 实例的属性和方法
Set 结构的实例有两种属性
Set.prototype.constructor 构造函数, 默认就是 Set 函数
Set.prototype.size: 返回 Set 实例的成员总数.
Set 实例方法分为两大类, 操作方法和遍历方法.
add(value) : 添加某个值, 返回 Set 结构本身, delete(value): 删除某个值, 返回布尔值,
表示是否删除成功.
has(value) 返回一个布尔值, 表示该值是否为 set 的成员. clear(), 清除所有成员, 没有返回值.
可以用 Array.from 方法将 Set 结构转为数组
- const item = new Set([1,2,3,4,]);
- const array = Array.from(items);
数组去重方法
- function dedupe(array) {
- return Array.from(new Set(array));
- }
- dedupe([1,1,2,3]) // [1,2,3]
Set 结构的实例有四个遍历方法, 可以用于遍历成员
keys() 返回键名的遍历器 values() 返回键值的遍历器, entries(), 返回键值对的遍历器 forEach() 使用回调函数遍历每一个.
ES6 提供了 Map 数据结构, 它类似于对象, 也就是键值对的集合.
- const m = new Map();
- const o = {p: 'Hello World'};
- m.set(o,'content');
- m.get(o) // "content"
- m.has(o) // true
- m.delete(o) // true
- m.has(o) // false
实例的属性和操作方法
1 size 属性 返回 Map 结构的成员总数
2.set(key,value) 设置键名 key 对应的键值为 value, 然后返回整个 Map 结构
3.get(key) ,get 方法读取 key 对应的键值, 如果找不到 key, 返回 undefined.
4.has(key) 返回一个布尔值, 表示某个键是否在当前 Map 独享之中.
5.delete(key) 方法删除某个键, 返回 true 如果删除失败, 返回 false.
6.clear() 方法清除所有成员, 没有返回值.
Map 结构提供三个便利器生成函数和一个遍历方法.
keys() 返回键名的遍历器 values() 返回键值的遍历器, entries(), 返回键值对的遍历器 forEach() 使用回调函数遍历每一个.
与其他数据结构之间的转换
(1)Map 转为数组, 前面已经提过, Map 转为数组最方便的方法, 就是使用扩展运算符
- const myMap = new Map().set(true,7).set({
- foo:3
- },['abc']);
- [...myMap]
(2) 数组转为 Map 将数组传入 Map 构造函数, 就可以转为 Map
new Map([[true,7],[{foo:3},['abc']]])
(3) Map 转为对象, 如果所有 Map 的键都是字符串, 它可以转为对象
- function strMapToObj(strMap){
- let obj = Object.create(null);
- for (let [k,v] of strMap) {
- obj[k] = v;
- }
- return obj;
- }
- const myMap = new Map().set('yes',true).set('no',false);
- strMapToObj(myMap)
(4) 对象转为 Map
- function objToStrMap(obj) {
- let strMap = new Map();
- for (let k of Object.keys(obj)) {
- strMap.set(k,obj[k]);
- }
- return strMap;
- }
- objToStrMap({yes:true,no:false})
(5)Map 转为 JSON
一种情况是, Map 的键名都是字符串, 这时可以选着转为对象 JSON
- function strMapToJson(strMap) {
- return JSON.stringify(strMapToObj(strMap));
- }
- let myMap = new Map().set('yes',true).set('no',false);
- strMapToJson(myMap)
另一种情况是 Map 的键名有非字符串, 这时可以选择转换为数组 JSON
- function mapToArrayJson(map){
- return JSON.stringify([...map]);
- }
- let myMap = new Map().set(true,7).set({foo:3},['abc']);
- mapToArrayJson(myMap)
另一种情况是 Map 的键名有非字符串, 这时可以选择转换为数组 JSON
- function mapToArrayJson(map){
- return JSON.stringify([...map]);
- }
- let myMap = new Map().set(true,7).set({foo:3},['abc']);
- mapToArrayJson(myMap)
(6)JSON 转为 Map
正常情况下所有键名都是字符串
- function jsonToStrMap(jsonString) {
- return ObjToStrMap(JSON.parse(jsonStr))
- }
- jsonToStrMap('{"yes":true,"no":false}')
结语
感谢您的观看, 如有不足之处, 欢迎批评指正.
来源: http://www.qdfuns.com/article/51117/58a7dcf19e41bf14b1a0e6496689a44c.html