1. /*
  2. * MAP对象,实现MAP功能
  3. *
  4. * 接口:
  5. * size() 获取MAP元素个数
  6. * isEmpty() 判断MAP是否为空
  7. * clear() 删除MAP所有元素
  8. * put(key, value) 向MAP中增加元素(key, value)
  9. * remove(key) 删除指定KEY的元素,成功返回True,失败返回False
  10. * get(key) 获取指定KEY的元素值VALUE,失败返回NULL
  11. * element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
  12. * containsKey(key) 判断MAP中是否含有指定KEY的元素
  13. * containsValue(value) 判断MAP中是否含有指定VALUE的元素
  14. * values() 获取MAP中所有VALUE的数组(ARRAY)
  15. * keys() 获取MAP中所有KEY的数组(ARRAY)
  16. *
  17. * 例子:
  18. * var map = new Map();
  19. *
  20. * map.put("key", "value");
  21. * var val = map.get("key")
  22. * ……
  23. *
  24. */
  25. function Map() {
  26. this.elements = new Array();
  27.  
  28. //获取MAP元素个数
  29. this.size = function() {
  30. return this.elements.length;
  31. };
  32.  
  33. //判断MAP是否为空
  34. this.isEmpty = function() {
  35. return (this.elements.length < 1);
  36. };
  37.  
  38. //删除MAP所有元素
  39. this.clear = function() {
  40. this.elements = new Array();
  41. };
  42.  
  43. //向MAP中增加元素(key, value)
  44. this.put = function(_key, _value) {
  45. this.elements.push( {
  46. key : _key,
  47. value : _value
  48. });
  49. };
  50.  
  51. //删除指定KEY的元素,成功返回True,失败返回False
  52. this.removeByKey = function(_key) {
  53. var bln = false;
  54. try {
  55. for (i = 0; i < this.elements.length; i++) {
  56. if (this.elements[i].key == _key) {
  57. this.elements.splice(i, 1);
  58. return true;
  59. }
  60. }
  61. } catch (e) {
  62. bln = false;
  63. }
  64. return bln;
  65. };
  66.  
  67. //删除指定VALUE的元素,成功返回True,失败返回False
  68. this.removeByValue = function(_value) {//removeByValueAndKey
  69. var bln = false;
  70. try {
  71. for (i = 0; i < this.elements.length; i++) {
  72. if (this.elements[i].value == _value) {
  73. this.elements.splice(i, 1);
  74. return true;
  75. }
  76. }
  77. } catch (e) {
  78. bln = false;
  79. }
  80. return bln;
  81. };
  82.  
  83. //删除指定VALUE的元素,成功返回True,失败返回False
  84. this.removeByValueAndKey = function(_key,_value) {
  85. var bln = false;
  86. try {
  87. for (i = 0; i < this.elements.length; i++) {
  88. if (this.elements[i].value == _value && this.elements[i].key == _key) {
  89. this.elements.splice(i, 1);
  90. return true;
  91. }
  92. }
  93. } catch (e) {
  94. bln = false;
  95. }
  96. return bln;
  97. };
  98.  
  99. //获取指定KEY的元素值VALUE,失败返回NULL
  100. this.get = function(_key) {
  101. try {
  102. for (i = 0; i < this.elements.length; i++) {
  103. if (this.elements[i].key == _key) {
  104. return this.elements[i].value;
  105. }
  106. }
  107. } catch (e) {
  108. return false;
  109. }
  110. return false;
  111. };
  112.  
  113. //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
  114. this.element = function(_index) {
  115. if (_index < 0 || _index >= this.elements.length) {
  116. return null;
  117. }
  118. return this.elements[_index];
  119. };
  120.  
  121. //判断MAP中是否含有指定KEY的元素
  122. this.containsKey = function(_key) {
  123. var bln = false;
  124. try {
  125. for (i = 0; i < this.elements.length; i++) {
  126. if (this.elements[i].key == _key) {
  127. bln = true;
  128. }
  129. }
  130. } catch (e) {
  131. bln = false;
  132. }
  133. return bln;
  134. };
  135.  
  136. //判断MAP中是否含有指定VALUE的元素
  137. this.containsValue = function(_value) {
  138. var bln = false;
  139. try {
  140. for (i = 0; i < this.elements.length; i++) {
  141. if (this.elements[i].value == _value) {
  142. bln = true;
  143. }
  144. }
  145. } catch (e) {
  146. bln = false;
  147. }
  148. return bln;
  149. };
  150.  
  151. //判断MAP中是否含有指定VALUE的元素
  152. this.containsObj = function(_key,_value) {
  153. var bln = false;
  154. try {
  155. for (i = 0; i < this.elements.length; i++) {
  156. if (this.elements[i].value == _value && this.elements[i].key == _key) {
  157. bln = true;
  158. }
  159. }
  160. } catch (e) {
  161. bln = false;
  162. }
  163. return bln;
  164. };
  165.  
  166. //获取MAP中所有VALUE的数组(ARRAY)
  167. this.values = function() {
  168. var arr = new Array();
  169. for (i = 0; i < this.elements.length; i++) {
  170. arr.push(this.elements[i].value);
  171. }
  172. return arr;
  173. };
  174.  
  175. //获取MAP中所有VALUE的数组(ARRAY)
  176. this.valuesByKey = function(_key) {
  177. var arr = new Array();
  178. for (i = 0; i < this.elements.length; i++) {
  179. if (this.elements[i].key == _key) {
  180. arr.push(this.elements[i].value);
  181. }
  182. }
  183. return arr;
  184. };
  185.  
  186. //获取MAP中所有KEY的数组(ARRAY)
  187. this.keys = function() {
  188. var arr = new Array();
  189. for (i = 0; i < this.elements.length; i++) {
  190. arr.push(this.elements[i].key);
  191. }
  192. return arr;
  193. };
  194.  
  195. //获取key通过value
  196. this.keysByValue = function(_value) {
  197. var arr = new Array();
  198. for (i = 0; i < this.elements.length; i++) {
  199. if(_value == this.elements[i].value){
  200. arr.push(this.elements[i].key);
  201. }
  202. }
  203. return arr;
  204. };
  205.  
  206. //获取MAP中所有KEY的数组(ARRAY)
  207. this.keysRemoveDuplicate = function() {
  208. var arr = new Array();
  209. for (i = 0; i < this.elements.length; i++) {
  210. var flag = true;
  211. for(var j=0;j<arr.length;j++){
  212. if(arr[j] == this.elements[i].key){
  213. flag = false;
  214. break;
  215. }
  216. }
  217. if(flag){
  218. arr.push(this.elements[i].key);
  219. }
  220. }
  221. return arr;
  222. };
  223. }

JS Map 简单实现的更多相关文章

  1. 在高德地图上用svg.js绘制简单图形

    这段时间做的一个项目,需要在地图上绘制简单的图形.在学习高德地图JS API的过程中,发现高德地图提供的点.线等API并不能满足我的需求,还好它开放了自定义图层CustomLayer,官方说自定义图层 ...

  2. 原生JS封装简单动画效果

    原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...

  3. angularjs中 *.min.js.map 404的问题

    初次使用AngularJS,在chrom调试的时候,出现如下问题: GET http://localhost:63342/luosuo/visitor/js/lib/angular-animate.m ...

  4. HTML(.js) – 最简单的方式操作 DOM 的 JS 库

    HTML(.js) 是一个轻量的(压缩后~2kb) JavaScript 库,简化了与 DOM 交互的方法. 这个 JavaScript 库的方法可读性很好,并具有搜索和遍历 DOM 的方法.相比 j ...

  5. [Javascript] Creating an Immutable Object Graph with Immutable.js Map()

    Learn how to create an Immutable.Map() through plain Javascript object construction and also via arr ...

  6. Sea.js提供简单、极致的模块化开发体验

    为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...

  7. C++关联容器<map>简单总结

    C++关联容器<map>简单总结 map提供大小可变的关联容器,基于关联键值高效检索元素值.当你处理键值对的数据是,都可以考虑使用map关联容器. 特点: 大小可变的关联容器,基于关联键值 ...

  8. [Immutable.js] Working with Subsets of an Immutable.js Map()

    Immutable.js offers methods to break immutable structures into subsets much like Array--for instance ...

  9. [Immutable.js] Differences between the Immutable.js Map() and List()

    The Immutable.js Map() is analogous to a Javascript Object or Hash since it is comprised of key-valu ...

随机推荐

  1. 设计模式学习--复合模式(Compound Pattern)

    设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...

  2. 转:jQuery LigerUI 使用教程表格篇(3) 复选框、多表头、分组、汇总和明细

    阅读目录 复选框 多表头 分组 汇总 明细 复选框 grid可以设置复选框模式进行多选,只需要简单的配置 checked:true 获取选中行 如果要获取选中的行,可以用getSelecteds方法: ...

  3. jQuery Ajax 的 load()方式

     load() 方法 load() 是所有jQuery工具中最简单的,向它传入一个URL,它会异步加载URL内的内容,然后将内容插入每一个选中元素中,替换掉已经存在的任何内容. 例如 $(" ...

  4. POJ Farm Tour

    Farm Tour 题目: 约翰有N块地,家在1号,而N号是个仓库.农场内有M条道路(双向的),道路i连接这ai号地和bi号地,长度为ci. 约翰希望依照从家里出发,经过若干地后达到仓库.然后再返回家 ...

  5. -bash: ulimit: open files: cannot modify limit: Operation not permitted

    普通用户登录系统报错,提示: -bash: ulimit: open files: cannot modify limit: Operation not permitted. 处理方法: #vi /e ...

  6. Linux 机器之间建立互信

    原理: 就是两台机器(web-1和web-2)经过预先设置好经过认证的key文件,双方互相访问时,进行自动认证,从而实现互信.   互信的原理了解了,我们可以把配置ssh互信的步骤进行有效的分割. 1 ...

  7. php 时间转换

    在数据库读出的数据,都是字符类型的,所以需要转换: 时间的转换:用date ()函数来实现时间格式; date() 函数默认时间是1970/01/01/ 00:00:00; 要想得到想要的时间就还得用 ...

  8. ListView 水平滑动 水平和竖直滑动

    效果 Activity public class MainActivity extends Activity {     @Override     protected void onCreate(B ...

  9. Error: theForm.submit is not a function !!

    theForm.submit is not a function 调试了半天,才发现范了低级错误. 页面中有一个按钮ID 是 submit 而引发的错误. 引出的问题是页面上的元素命名范围不能是 wi ...

  10. Redhat Enterprise 5.4下安装配置Oracle 11g R2详细过程

    1.Linux环境配置准备 环境:Linux:Redhat Enterprise 5.4,DB:Oracle 11g R2 X64,Oracle安装到/home/oralce_11目录下. 配置过程如 ...