1.Set
本身为一个类似于数组构造函数,但set成员值是唯一的没有重复的值
例
const s=new set();
[2,3,5,4,5].forEach(x=>s.add(x));
for(let i for s){
console.log(i);
}
//2,3,5,4
set函数可以接收一个数组作为参数;
例
const set=new Set([1,2,3,4,5,5]};
[...set]
//[1,2,3,4,5]
Set内部判断两个值是否不同,使用算法类似于”=”与”=”主要区别是,向set加入值时认为NaN等于自身,而精确相等运算符“===”认为NaN不等于自身
set实例的属性与方法
Set.prototype.constructor构造函数,默认是set函数
Set.prototype.size返回set实例成员总数
Set操作方法
add(value):添加某个值,返回set结构本身;
delete(value);删除某个值,返回一个布尔值,表示删除是否成功。
clear()清除所有成员
has(value)返回一个布尔值,表示该值是否为set的成员;
例
s.add(1).add(2).add(2)
s.size//2
s.has(1)//true
s.delete(2);
s.has(2)//false
遍历操作
keys()返回键名
values();返回键值遍历器
entries();//返回键值对遍历器
forEach();//使用回调函数遍历每个成员
例
let set=new Set(['red','green']);
for(let item of set.keys()){
console.log(item);
}
//red green
for(let item of set.values()){
console.log(item);
}
//red green
for(let item of set.entries()){
console.log(item);
}
//["red","red"]
//["green","green"]
set去重
var arr=[1,2,3,4,4]
var set=new Set(arr)
arr=[...set]
//[1,2,3,4]
二,Map
map结构提供了“值-值”对应,是种更完善的hash结构的实现
例
const m=new Map();
const b={p,"hello world"}
m.set(b,"content")
m.get(b)//content
m.delete(b)
m.has(b)//false
2若对一个键多次赋值,后面值覆盖前面值
const map=new Map();
map.set(1,'aaa').set(1,'bbb');
map.get(1)//'bbb'
3.若读取一个未知键,则返回undefined
new Map().get('abcd')//undefined
4,只有对同一个对象使用Map结构才将其视为同一个键
const map=new Map();
map.set(['a'],555);
map.get(['a'])//undfined
同理如下
const map=new Map();
const k1=['a'];
const k2=['a'];
map.set(k1,111).set(k2,222);
map.get(k1)//111
map.get(k2)//222
上述中,k1与k2值一样,但其在Map中被视为2个键,即Map键实际上是与内存地址绑定的
true与‘true’两个键
undefined与null俩个键
map中NaN等于NaN