Set,Map数据结构
Set数据结构
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。
const s = new Set()
s.add(1).add(2).add(1).add(3) //添加,可链式调用,不重复
console.log(s);
//Set {1,2,3}
Set遍历对象
//set对象遍历
s.forEach(i=>console.log(i))for(let i of s)
{
console.log(i);
}
console.log(s.size);
//set对象长度
console.log(s.has(100));
//false
console.log(s.delete(2));
//true
console.log(s);
//{1,3}
console.log(s.clear());
//清除集合内的全部内容
应用场景
//数组去重
const arr = [1,1,1,3,2,1,4,4]
const ss = new Set(arr)
const narr = Array.from(ss) //转化成真实数组
console.log(ss,narr);
const result = [...ss]//转化成真实数组
console.log(result);
Map数据结构 类似于对象,本质上都是键值对集合
原始的对象key无论什么类型都会被转化成字符串
Map是严格意义上的键值对集合,可以使用任意类型的键
Map与对象的区别
简单的说,Object类型就是添加计算属性,或者通过外部添加属性,他都会转化成string,且Object的key只允许string或symbol,而map很好解决了键的类型问题
传统的添加键值对
const obj = {
name:"mcgee"
}
obj[true] = "value"
obj[11] = "value"
obj[{a:1}] = "value"console.log(Object.keys(obj)) //[ '11', 'name', 'true', '[object Object]' ]
任意类型的Map键值对
const m = new Map()
const str = {a:1};
m.set(str,"value") //key , value
m.set(11,"asd")
console.log(m);
操作方法
console.log(m.size)
console.log(m.get(str))
m.delete(11)
console.log(m);
m.clear()
console.log(m);
Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"
上面实际执行的是
const items = [
['name', '张三'],
['title', 'Author']
];
const map = new Map();
items.forEach(
([key, value]) => map.set(key, value)
);
【Set,Map数据结构】支持 iterator接口可被for..of..
推荐阅读
- Swift中willSet和didSet的简述
- 《数据结构与算法之美》——队列
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- Hadoop|Hadoop MapReduce Job提交后的交互日志
- MapStruct
- HashMap&ConcurrentHashMap&HashTable
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- Java深入了解数据结构之栈与队列的详解
- Java集合框架|Java集合框架 数据结构
- 数据结构与算法|【算法】力扣第 266场周赛