1.Set对象
Set对象是一些元素的集合(看到集合,我们就会联想到集合内的元素都是不重复),如果你在Set中添加已存在的元素,该元素不会被添加
说明:若添加的是对象或者数组,则是看添加的是否是指向同一地址,若不是指向同一块地址,则可以都添加进去
2.Set对象的方法
let set = new Set();
// add(value) 在对象尾部添加一个元素
set.add(1);
set.add(2);
console.log("add方法 " + set);
// clear() 移除对象内的所有元素
set.clear();
console.log("清除方法 " + set);
// delete(value) 移除对象中与这个值相等的元素
set.add(1);
set.delete(1);
console.log("移除某个元素 " + set);
// size 得到对象元素的个数
console.log("元素个数值: " + set.size);
// keys() 返回一个新的迭代对象, 对象中包含每个元素的键名
set.add(0);
set.add(1);
console.log("返回元素键名 " );
for(let value of set.keys()){
console.log(value);
}
// values() 返回一个新的迭代对象,对象中包含每个元素的键值
console.log("返回元素键值 ");
for(let value of set.values()){
console.log(value);
}
// forEach(fn) 为set对象中每个元素调用一次回调函数fn
console.log("遍历set对象:")
set.forEach(value => {
console.log(value);
})
// entries() 返回一个新的迭代对象,包含每个元素的键名和键值对
console.log("返回元素的键名和键值对 ");
for(let value of set.entries()){
console.log(value);
}
// has(value) 判断指定值是否在set对象中,返回布尔值
console.log("判断元素是否存在:" + set.has(1));
// 可以使用for of遍历循环
for(let value of set){
console.log(value);
}
运行结果如下:
// new Set() 括号内可传入字符串,可将其转化为集合
let set = new Set("abcde");
set.forEach(value => {
console.log(value);
})
console.log("-----------------------------");
// 括号内也可传入数组
let arr = [1,2,3];
set = new Set(arr);
set.forEach(value => {
console.log(value);
})
console.log("-------------------------");
// Array.from() 可将set对象转成数组
let myArr = Array.from(set);
console.log(myArr);
运行结果如下:
3.Map对象的方法
map对象和set对象的方法大致相同,map对象中的键值是有序的
// map对象没有add方法,而是有set方法
let map = new Map();
// set(key,value) 添加键名和键值
map.set('h',1);
map.set('d',2);
console.log(map);
运行结果如下:
// get(key) 根据键名返回键值
let map = new Map();
map.set('a',1);
console.log(map.get('a'));
运行结果如下:
// 使用数组来创建一个map对象
let arr = [[0,"zero"],[1,"one"]];
let map = new Map(arr);
console.log(map);
运行结果如下:
NaN也可以作为Map对象的键,虽然NaN和任何值都是不相等的,但两个NaN作为键名来说是没有区别的,
var myMap = new Map();
myMap.set(NaN, "not a number");
myMap.get(NaN); // "not a number"
var otherNaN = Number("foo"); // otherNaN 为NaN
myMap.get(otherNaN); // "not a number"
4.Map的合并
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
// 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, three
var merged = new Map([...first, ...second]);