const map = new Map([
['name', '张三'],
['age', 18],
]);
console.log(map,...map,[...map])
// Map(2) {'name' => '张三', 'age' => 18}
// ['name', '张三'] ['age', 18]
// [ ['name', '张三'], ['age', 18] ]
Map与Set的区别
集合-----是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合
字典-----是一些元素的集合。每个元素有一个称作key 的域,不同元素的key 各不相同
[值,值]
的形式存储元素[键,值]
的形式存储size属性
返回 Map 结构的成员总数set()
设置键名key对应的键值为value;key重复值会被覆盖
返回整个 Map 结构,可采用链式写法
get()
读取key对应的键值,如果找不到key,返回undefinedhas()
检测某个键是否存在delete()
删除某个键,返回true。如果删除失败,返回falseclear()
清除所有成员,清除后size为0const map = new Map();
map.set('foo', true); // 键是字符串
map.set(fn, 'standard') // 键是函数
map.set(1, 'a').set(2, 'b').set(3, 'c') // 链式操作
map.size // 键值对个数 5
map.get(1) // a 读取键值
map.has('foo') // true 键是否存在
map.delete('foo') // 删除键值对
map.clear() // 清空map
const map = new Map([
['F', 'no'],
['T', 'yes'],
]);
console.log(map.keys()) // {'F', 'T'}
console.log(map.values()) // {'no', 'yes'}
console.log(map.entries()) // {'F' => 'no', 'T' => 'yes'}
map.forEach(function(value, key, map) {
console.log(key, value); // F no // T yes
});
/**
* 按钮点击事件
* @param {number} status 活动状态:1开团进行中 2开团失败 3 开团成功 4 商品售罄 5 有库存未开团
* @param {string} identity 身份标识:guest客态 master主态
*/
const onButtonClick = (status,identity)=>{
if(identity == 'guest'){
if(status == 1){
//do sth
}else if(status == 2){
//do sth
}else if(status == 3){
//do sth
}else if(status == 4){
//do sth
}else if(status == 5){
//do sth
}else {
//do sth
}
}else if(identity == 'master') {
if(status == 1){
//do sth
}else if(status == 2){
//do sth
}else if(status == 3){
//do sth
}else if(status == 4){
//do sth
}else if(status == 5){
//do sth
}else {
//do sth
}
}
}
// 使用Map方法
const actions = new Map([
['guest_1', ()=>{/*do sth*/}],
['guest_2', ()=>{/*do sth*/}],
['guest_3', ()=>{/*do sth*/}],
['guest_4', ()=>{/*do sth*/}],
['guest_5', ()=>{/*do sth*/}],
['master_1', ()=>{/*do sth*/}],
['master_2', ()=>{/*do sth*/}],
['master_3', ()=>{/*do sth*/}],
['master_4', ()=>{/*do sth*/}],
['master_5', ()=>{/*do sth*/}],
['default', ()=>{/*do sth*/}],
])
/**
* 按钮点击事件
* @param {string} identity 身份标识:guest客态 master主态
* @param {number} status 活动状态:1 开团进行中 2 开团失败 3 开团成功 4 商品售罄 5 有库存未开团
*/
const onButtonClick = (identity,status)=>{
// Map的get方法根据传入的参数获取当前key值对应的value值,即当前情况的处理函数
let action = actions.get(`${identity}_${status}`) || actions.get('default')
action.call(this) // call方法执行action函数
}
// 某些情况执行一样的回调,可使用正则
// 回调函数也可以提取出来
const actions = ()=>{
const functionA = ()=>{/*do sth*/}
const functionB = ()=>{/*do sth*/}
const functionC = ()=>{/*send log*/}
return new Map([
[/^guest_[1-4]$/,functionA], // guest 1、2、3、4
[/^guest_5$/,functionB], // guest 5
[/^guest_.*$/,functionC], // guest 所有情况
//...
])
}
const onButtonClick = (identity,status)=>{
let action = [...actions()].filter(([key,value])=>(key.test(`${identity}_${status}`)))
action.forEach(([key,value])=>value.call(this))
}
let list = new Set(['a','b','c','a'])
console.log(list,[...list])
// Set(3) {'a', 'b', 'c'}
// ['a', 'b', 'c']
size属性
返回 set 结构的成员总数add
添加某个值,返回 Set 结构本身重复值不会添加
返回整个 set 结构,可采用链式写法
has()
检测某个值是否存在delete()
删除某个值,返回true。如果删除失败,返回falseclear()
清除所有成员const set= new Set();
set.add(1); // 添加元素
set.add(2).add(3).add(3) // 链式操作
set.size // 3
set.delete(1) // 删除值
set.has(2) // true 是否存在
set.clear() // 清空
let list = new Set(['a','b','c'])
console.log(list.keys()) // {'a', 'b', 'c'}
console.log(list.values()) // {'a', 'b', 'c'}
console.log(list.entries()) // {'a' => 'a', 'b' => 'b', 'c' => 'c'}
map.forEach(function(value, key ) {
console.log(key, value);
});
let arr = [3, 5, 2, 2, 5, 5];
let setArr = new Set(arr) // 返回set数据结构 Set(3) {3, 5, 2}
// es6的...解构
let unique1 = [...setArr ]; //去重转数组后 [3,5,2]
// Array.from()解析类数组为数组
let unique2 = Array.from(setArr ) //去重转数组后 [3,5,2]
let str = "352255";
let unique = [...new Set(str)].join(""); // 352
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}