js实现字典
字典
字典和集合很相似,集合以[值,值]的形式存储元素,字典则是以[键,值]的形式来存储元素
实现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 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器