前端笔记8 es6 新增数据结构 set 和map

set  类似于数组,但是成员不能重复。

//创建方式1
const set = new Set();
set.add(2); //增加成员
set.add(4).add(2); //链式写法
console.log(set); //Set(2) {2, 4}
//创建方式2
var arr = [1,2,3,4,2,4,5,6,7];
const set2 = new Set(arr);
console.log(set2); //Set(7) {1, 2, 3, 4, 5, 6,7}
//创建方式3
var arr = [1,2,3,4,2,4,5,6,7];
arr.forEach(item => set3.add(item));
console.log(set3);    //Set(7) {1, 2, 3, 4, 5, 6,7}
 
自带的属性和方法: size,delete() ,clear() ,has()
//size 长度,去重后的长度
var size = set.size;
console.log(size);
//delete() 删除
var result = set.delete(4);
console.log(result); //true
//clear() 清空所有
//has() 是否set成员 返回true/false
set3.has(1);

用途:

数组去重
//方法1
console.log([...new Set(arr)]);
//方法2
var arr4 = new Set([1,2,3,4,2,4,5,6,7]);
var arr5 = Array.from(arr4);
数组交、并、差集
var arr6 = new Set([1,2,2,3,4,5,2,6,7,8]);
var arr7 = new Set([9,5,2,4,8]);
//交集
var arr8 = [...arr6].filter(item => arr7.has(item));
console.log(arr8); //[2,4,5,8]
//并集
var arr9 = [...arr6,...arr7];
//差集
var arr10 = [...arr6].filter(item => !arr7.has(item));
在循环中使用 for of   for in
//for...of 针对array string set map (iterator 方法)
//for...in 针对对象(获取键),数组中获取索引
//keys()   value()   entries()
for(let v of new Set([1,2,3,4,2,4,5,6,7])){
console.log(v);
}
for(let v of (new Set([1,2,3,4,2,4,5,6,7])).entries()){
console.log(v);
}
 
Map  类似于对象,map的键可以是string意外其它的类型
创建和基本的方法
var m = new Map();
m.set('name','abc').set('age',20);
m.set(123,'123').set(true,'1234').set(undefined,'125');
var a = {msg:'hello'};
m.set(a,'name');
console.log(m.get(a));
m.set(null,'fad');
console.log(m.get(null));
//m.size
//m.has() ,clear(),delete()
//可以接受一个数组参数
var m1 = new Map([['name','abc'],['age',18]]);
 
for  of 中使用
for(let [k,v] of m1){
console.log(v);
}
for(let v of m1.values()){
console.log(v);
}
//获取所有键
[...m1.keys()]
console.log(m1.keys());
 
相互转换
//map 转数组
[...m];
[...m1.keys()]
//数组转Map
var m2 = new Map([...m]);
//map 转对象
var obj = {};
for(let [k,v] of m){
  obj[k] = v;
}
//对象转map
var m3 = new Map();
for(let k in obj){
  m3.set(k,obj[k]);
}
function objToStrMap(obj){
  let m = new Map();
  for(let k of Object.keys(obj)){
    m.set(k,obj[k]);
  }
  return m;
}
 
 
posted @ 2018-11-07 19:52  longshenzhu  阅读(241)  评论(0编辑  收藏  举报