set集合、map映射的特点:不重复、无序
声明set:let set = new Set();
获取成员的个数:set.size
添加成员:set.add(成员);
删除成员:set.delete(成员);
清除所有成员:set.clear();
判断某个值是否是set的成员:let flag = set.has(成员);
遍历
① for…of
let set = new Set([1, 2, 3, 4, 5, 6]);
for(let item of set) {
console.log(item);
}
② forEach
let set = new Set([1, 2, 3, 4, 5, 6]);
set.forEach((item, index) => {
console.log(index, item); // index为键;item为值,且键和值相同
})
数组与集合互相转换
① 数组变集合
let arr = [1, 2, 3, 4, 5, 6];
let set = new Set(arr);
② 集合变数组
let set = new Set([1, 2, 3, 4, 5, 6]);
let arr = [...set];
数组去重
let arr = [...new Set([1, 2, 2, 4, 3, 5, 6, 6])]; // [1, 2, 4, 3, 5, 6]
map与set区别:map的键可以是任意数据类型
let map = new Map();
map.set(a, 123); // 键:a 值:123
map.set({
name: '小w'
}, 18); // 键:包含name属性的对象 值: 18
// 通过map.keys()遍历键
for(let key of map.keys()) {
console.log(key); // a 、 {name: '小w'}
}
// 通过map.values()遍历值
for(let value of map.values()) {
console.log(value); // 123、18
}
// 通过map遍历键值对
for(let [key, value] of map) {
console.log(key, value); // 这里通过解构赋值的方式可直接获取到key和value
}