首页 > 语言 > JavaScript > 正文

JavaScript中利用Array和Object实现Map的方法

2024-05-06 16:23:49
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JavaScript中利用Array和Object实现Map的方法,实例分析了javascript实现map的添加、获取、移除、清空、遍历等操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了JavaScript中利用Array和Object实现Map的方法。分享给大家供大家参考。具体如下:

昨天突然看到以前别人用JavaScript实现的Map感觉很不错,但是发现有个别方法有问题,顺便完善了下,添加了 remove 、indexOf 、values、clear等方法。

 

 
  1. /** 
  2. * @author blune68 
  3. * @version 0.1, 07/27/12 
  4.  
  5. */ 
  6. function Map(){ 
  7. this.keys = new Array();  
  8. this.data = new Object(); 
  9. var toString = Object.prototype.toString; 
  10. /** 
  11. * 当前Map当前长度 
  12. */ 
  13. this.size = function(){ 
  14. return this.keys.length; 
  15. /** 
  16. * 添加值 
  17. * @param {Object} key 
  18. * @param {Object} value 
  19. */ 
  20. this.put = function(key, value){ 
  21. if(this.data[key] == null){ 
  22. this.data[key] = value; 
  23. this.keys.push(key); 
  24. /** 
  25. * 根据当前key获取value 
  26. * @param {Object} key 
  27. */ 
  28. this.get = function(key){ 
  29. return this.data[key]; 
  30. /** 
  31. * 根据当前key移除Map对应值 
  32. * @param {Object} key 
  33. */ 
  34. this.remove = function(key){ 
  35. var index = this.indexOf(key); 
  36. if(index != -1){ 
  37. this.keys.splice(index, 1); 
  38. this.data[key] = null
  39. /** 
  40. * 清空Map 
  41. */ 
  42. this.clear = function(){ 
  43. for(var i=0, len = this.size(); i < len; i++){ 
  44. var key = this.keys[i]; 
  45. this.data[key] = null
  46. this.keys.length = 0; 
  47. /** 
  48. * 当前key是否存在 
  49. * @param {Object} key 
  50. */ 
  51. this.containsKey = function(key){ 
  52. return this.data[key] != null
  53. /** 
  54. * 是否为空 
  55. */ 
  56. this.isEmpty = function(){ 
  57. return this.keys.length === 0; 
  58. /** 
  59. * 类型Java中Map.entrySet 
  60. */ 
  61. this.entrySet = function(){ 
  62. var size = this.size(); 
  63. var datas = new Array(size); 
  64. for (var i = 0, len = size; i < len; i++) { 
  65. var key = this.keys[i]; 
  66. var value = this.data[key]; 
  67. datas[i] = { 
  68. 'key' : key, 
  69. 'value':value  
  70. return datas; 
  71. /** 
  72. * 遍历当前Map 
  73. * var map = new Map(); 
  74. * map.put('key', 'value'); 
  75. * map.each(function(index, key, value){ 
  76. * console.log("index:" + index + "--key:" + key + "--value:" + value) 
  77. * }) 
  78. * @param {Object} fn 
  79. */ 
  80. this.each = function(fn){ 
  81. if(toString.call(fn) === '[object Function]'){ 
  82. for (var i = 0, len = this.size(); i < len; i++) { 
  83. var key = this.keys[i]; 
  84. fn(i, key, this.data[key]); 
  85. return null
  86. /** 
  87. * 获取Map中 当前key 索引值 
  88. * @param {Object} key 
  89. */ 
  90. this.indexOf = function(key){ 
  91. var size = this.size(); 
  92. if(size > 0){ 
  93. for(var i=0, len=size; i < len; i++){ 
  94. if(this.keys[i] == key) 
  95. return i; 
  96. return -1; 
  97. /** 
  98. * Override toString 
  99. */ 
  100. this.toString = function(){ 
  101. var str = "{"
  102. for (var i = 0, len = this.size(); i < len; i++, str+=",") { 
  103. var key = this.keys[i]; 
  104. var value = this.data[key]; 
  105. str += key + "=" + value;  
  106. str = str.substring(0, str.length-1); 
  107. str += "}"
  108. return str; 
  109. /** 
  110. * 获取Map中的所有value值(Array) 
  111. */ 
  112. this.values = function(){ 
  113. var size = this.size(); 
  114. var values = new Array(); 
  115. for(var i = 0; i < size; i++){ 
  116. var key = this.keys[i]; 
  117. values.push(this.data[key]); 
  118. return values; 

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选