一、Set
Set本身是一种构造函数,用来生成Set数据结构
var s = new Set();
var arr = [1,2,1,3,4,3,2,5,5];
arr.map(x => s.add(x));// 使用add方法向Set增加数据
for(let i of s){
console.log(i)
}
1
2
3
4
5//=》自带去重功能
var arr = new Set([1,2,3,4,5,'5',6,7,7,7])
arr.size//=》8,Set中5和'5'是不同的值
arr.add(8)//=》添加8这个值
arr.delet(8)//=》删除8
arr.has(8)//=》判断是否存在8,返回值为boolean
arr.clear()//=》清理所有成员
Array.from可以将Set结构转为数组
var items = Array.from(arr)
items//=》 [1, 2, 3, 4, 5, "5", 6, 7, 8]
二、Map
JavaScript是键值对的集合,通常只能用字符串作为键,这样就有了很大的限制,Map解决了这一问题
// 例1:
var m = new Map();
o = { x: 'asdasd' }; //=》{x: "asdasd"}
m.set(o, '内容')//使用o这个对象作为键
m.get(o);//=》"内容"
//例2:值一样的两个实例被认为是两个键
var m1 = new Map();
var k1 = ['asd'];
var k2 = ['asd'];
m1.set(k1, 100);
m1.set(k2, 200);
m1.get(k1);//=》100
m1.get(k2);//=》200
//例3:
var m = new Map([["name", "lx"], ["age", 50]]);
m.size//=》2
m.has('lx');//=》false
m.has('name');//=》true
m.get('name');//=》"lx"
m.get('age')//=》50
m.delete('name');//=》true 现在删除‘name’
m.has('name');//=》false
m.set(undefined, 'undefined');
m.get(undefined);//=>'undefined'
m.set(222, '200');
m.get(222);//=>' 200 '
var foo = function () { console.log('函数') }
m.set(foo, '函数');
m.get(foo)//=>'函数'
//Map提供的遍历器keys() / values() / entries()
for (let key of m.keys()) {
console.log(key)//age undefined 222返回键名
}
//-------------------------------------------------
for (let val of m.values()) {
console.log(val)//返回键值
}
50
undefined
200
函数
//---------------------------------------------------
for (let item of m.entries()) {
console.log('key:s%,val:s%', item[0], item[1])//返回整项
}
key: s %, val: s % age 50
key: s %, val: s % undefined undefined
key: s %, val: s % 222 200
key: s %, val: s % ƒ(){ console.log('函数') } 函数