字典map
2021/8/10 23:05:41
本文主要是介绍字典map,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
字典
字典和集合很相似,集合以[值,值]的形式存储元素,字典则是以[键,值]的形式来存储元素实现Dictionary
function defaultToString(item){ // 将键转化为字符串 if(item === null){ return 'NULL' }else if(item === undefined){ return 'UNDEFINED' }else{ return item.toString() } } class valuePair{ // 键值对 constructor(key, value){ this.key = key this.value = value } toString(){ return `[#${this.key}: ${this.value}]` } } class Dictionary{ constructor(toStrFn = defaultToString){ this.toStrFn = toStrFn // 键转化为字符串 this.table = {} } hasKey(key){ return this.table[this.toStrFn[key]] !== undefined } set(key, val){ // 添加新元素 if(key !== null && val !== null){ const strKey = this.toStrFn(key) this.table[strKey] = new valuePair(key, val) return true } return false } remove(key){ if (this.hasKey(key)) { delete this.table[this.toStrFn(key)] return true } return false } get(key){ const value = this.table[this.toStrFn(key)] return value === undefined ? null : value.value } keyValues(){ // 返回所有键值对组成的数组 // Object.values(obj): Returns an array of values of the enumerable properties of an object return Object.values(this.table) } keys(){ // 返回所有键组成的数组 return this.keyValues().map((val) => { return val.key }) } values(){ // 返回所有值组成的数组 return this.keyValues().map((val) => { return val.value }) } forEach(callbackFn){ // 传入一个函数,参数为(key, value),迭代数组中的每个键值对运行 const valuePair = this.keyValues() for(let i=0; i<valuePair.length; i++){ const result = callbackFn(valuePair[i].key, valuePair[i].value) if (result === false) { break // 出错立即停止 } } } size(){ return Object.keys(this.table).length } isEmpty(){ return this.size() === 0 } clear(){ this.table = {} } toString(){ if(this.isEmpty()){ return "" } const valuePairs = this.keyValues() let objString = `${valuePairs[0].toString()}` for(let i=1; i<this.size(); i++){ objString = `${objString},${valuePairs[i].toString()}` } return objString } }
原生Map类
const map = new Map() map.set("a","aa") map.set("b","bb") map.set("c","cc") console.log(map.has("b")) // true console.log(map.size) // 3 // 和我们定义的 Dictionary 类不同,ES2015 的 Map 类的 values 方法和 keys 方法都返回Iterator console.log(map.keys()) // [Map Iterator] { 'a', 'b', 'c' } console.log(map.values()) // [Map Iterator] { 'aa', 'bb', 'cc' } console.log(map.get("c")) // cc map.delete('c') // 删除
WeakMap 和 WeakSet
除了 Set 和 Map 这两种新的数据结构,ES2015还增加了它们的弱化版本,WeakSet 和 WeakMap 基本上,Map 和 Set 与其弱化版本之间仅有的区别是: 1. WeakSet 或 WeakMap 类没有 entries、keys 和 values 等方法 2. 只能用对象作为键。 创建和使用这两个类主要是为了性能。WeakSet 和 WeakMap 是弱化的(用对象作为键),没有强引用的键,这使得 JavaScript 的垃圾回收器可以从中清除整个入口。 另一个优点是,必须用键才可以取出值,这些类没有 entries、keys 和 values 等迭代器方法,因此,除非你知道键,否则没有办法取出值,所以可以使用WeakMap类封装私有属性。// 例: const weakMap = new WeakMap() const obj1 = {"name": "1"} const obj2 = {"name": "2"} const obj3 = {"name": "3"} map.set(obj1, "111") map.set(obj2, "222") map.set(obj3, "333") console.log(map.has(obj1)) // true console.log(map.get(obj3)) // 333 map.delete(obj2) // 删除
这篇关于字典map的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?
- 2025-01-10实现精准执行:团队协作新方法
- 2025-01-10如何使用工具提升活动策划团队的工作效率?几个必备工具推荐
- 2025-01-10WiX 标签使用介绍:打造专业安装程序的利器