es6中的Set和Map内容整理
Set:是一种新的数据结构,类似于数组,但是里面的值都是唯一的
set本身是一个构造函数,可以通过const set = new Set()来创建一个set类型的值,通过构造函数创建后,会得到set原型上的一些方法
ps:通过构造函数创建新对象的过程,开辟一块新内存,创建一个空对象,设置原型继承原型上的方法,绑定this,执行构造函数中的方法,返回这个新对象
一般可以用set去除数组中的重复元素:[...new Set(array)], Array.from(new Set(array))]
Set上的一些方法:
add(): 添加元素
delete():删除某个值
has(): 判断set中是否有这个值
clear():清空所有值
遍历操作:
keys():返回键名
values(): 返回键值
entries():返回键值对
forEach():使用回调函数遍历每个成员
let set = new Set(['red', 'green', 'blue']); for (let item of set.keys()) { console.log(item); } // red // green // blue for (let item of set.values()) { console.log(item); } // red // green // blue
let set = new Set(['red', 'green', 'blue']);
// for...of 循环(set数据结构默认可遍历,可以直接用for of 循环替换values())
for (let x of set) {
console.log(x);
}
// red
// green
// blue
for (let item of set.entries()) { console.log(item); } // ["red", "red"] // ["green", "green"] // ["blue", "blue"]
使用forEach循环
let set = new Set([1, 4, 9]); set.forEach((value, key) => console.log(key + ' : ' + value)) // 1 : 1 // 4 : 4 // 9 : 9
可以间接使用数组中的方法
let set = new Set([1, 2, 3]); set = new Set([...set].map(x => x * 2)); // 返回Set结构:{2, 4, 6} let set = new Set([1, 2, 3, 4, 5]); set = new Set([...set].filter(x => (x % 2) == 0)); // 返回Set结构:{2, 4}
WeakSet:
与Set的区别:
WeakSet 的成员只能是对象,而不能是其他类型的值。
WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用
weakSet中的一些方法:
add(), delete(), has()
Map:一种数据结构,也是键值对的集合,但是各种类型的值都可以用作键
传统的对象Object,本质上是键值对集合,但是传统上只能用字符串当作键,Map解决了这种问题
1.可以通过Map上的set方法,添加属性
const m = new Map(); const o = {p: 'Hello World'}; m.set(o, 'content') m.get(o) // "content" m.has(o) // true m.delete(o) // true m.has(o) // false
2.通过数组创建
const map = new Map([ ['name', '张三'], ['title', 'Author'] ]); Map(2) {'name' => '张三', 'title' => 'Author'} [[Entries]] 0: {"name" => "张三"} 1: {"title" => "Author"} size: 2 [[Prototype]]: Map
注意:只有对同一个对象的引用,才算是同一个键
const map = new Map(); map.set(['a'], 555); map.get(['a']) // undefined
此时set和get对应的是两个不同的内存地址,所以get方法读取不到该值
Map()上的一些方法:
set():设置属性
get():读取属性
has():判断是否含有该属性
delete():删除属性
clear():清除所有属性
一些遍历方法:
keys(): 返回键名的遍历器
values(): 返回键值的遍历器
entries():返回所有成员的遍历器
forEach():遍历
可以通过[...map]来将Map数据结构转成数组结构,从而来实现一些数组上的方法
Map和对象互转:
Map转为对象:
function strMapToObj(strMap) { let obj = Object.create(null); for (let [k,v] of strMap) { obj[k] = v; } return obj; } const myMap = new Map() .set('yes', true) .set('no', false); strMapToObj(myMap) // { yes: true, no: false }
对象转为Map:
let obj = {"a":1, "b":2}; let map = new Map(Object.entries(obj));
WeakMap:只接受对象作为键名,键名所指向的对象不计入垃圾回收机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类