用js写了一个Map,带遍历功能,请大家点评下啦。
//map.js
Array.prototype.remove = function (s) { for ( var i = 0; i < this .length; i++) { if (s == this [i]) this .splice(i, 1); } } /** * Simple Map * * * var m = new Map(); * m.put('key','value'); * ... * var s = ""; * m.each(function(key,value,index){ * s += index+":"+ key+"="+value+"\n"; * }); * alert(s); * * @author dewitt * @date 2008-05-24 */ function Map() { /** 存放键的数组(遍历用到) */ this .keys = new Array(); /** 存放数据 */ this .data = new Object(); /** * 放入一个键值对 * @param {String} key * @param {Object} value */ this .put = function (key, value) { if ( this .data[key] == null ){ this .keys.push(key); } this .data[key] = value; }; /** * 获取某键对应的值 * @param {String} key * @return {Object} value */ this .get = function (key) { return this .data[key]; }; /** * 删除一个键值对 * @param {String} key */ this .remove = function (key) { this .keys.remove(key); this .data[key] = null ; }; /** * 遍历Map,执行处理函数 * * @param {Function} 回调函数 function(key,value,index){..} */ this .each = function (fn){ if ( typeof fn != 'function' ){ return ; } var len = this .keys.length; for ( var i=0;i<len;i++){ var k = this .keys[i]; fn(k, this .data[k],i); } }; /** * 获取键值数组(类似Java的entrySet()) * @return 键值对象{key,value}的数组 */ this .entrys = function () { var len = this .keys.length; var entrys = new Array(len); for ( var i = 0; i < len; i++) { entrys[i] = { key : this .keys[i], value : this .data[i] }; } return entrys; }; /** * 判断Map是否为空 */ this .isEmpty = function () { return this .keys.length == 0; }; /** * 获取键值对数量 */ this .size = function (){ return this .keys.length; }; /** * 重写toString */ this .toString = function (){ var s = "{" ; for ( var i=0;i< this .keys.length;i++,s+= ',' ){ var k = this .keys[i]; s += k+ "=" + this .data[k]; } s+= "}" ; return s; }; } function testMap(){ var m = new Map(); m.put( 'key1' , 'Comtop' ); m.put( 'key2' , '南方电网' ); m.put( 'key3' , '景新花园' ); alert( "init:" +m); m.put( 'key1' , '康拓普' ); alert( "set key1:" +m); m.remove( "key2" ); alert( "remove key2: " +m); var s = "" ; m.each( function (key,value,index){ s += index+ ":" + key+ "=" +value+ "\n" ; }); alert(s); } |
//testMap.htm
<html> <head> <title>Test Map</title> <script language= "javascript" src= "map.js" > </script> </head> <body> <input type= "button" value= "test" onclick= "testMap()" > </body> </html> |
分类:
| Javascript |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架