var map=new Map();

map.put("a","A");map.put("b","B");map.put("c","C");

map.get("a"); //返回:A

map.entrySet() // 返回Entity[{key,value},{key,value}]

map.containsKey('kevin') //返回:false

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;
}else{
this.data[key]=this.data[key];
}
return true;
}; /**
* 获取某键相应的值
* @param {String} key
* @return {Object} value
*/
this.get = function(key) {
return this.data[key];
}; /**
* 删除一个键值对
* @param {String} key
*/
this.remove = function(key) {
for(var i=0;i<this.keys.length;i++){
if(key===this.keys[i]){
var del_keys= this.keys.splice(i,1);
for(k in del_keys){
this.data[k] = null;
}
return true;
}
}
return false;
}; /**
* 遍历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);
}
}; /**
* 获取键值数组
* @return entity[{key,value},{key,value}]
*/
this.entrySet = 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[this.keys[i]]
};
}
return entrys;
}; /**
* 推断Map是否为空
*/
this.isEmpty = function() {
return this.keys.length == 0;
}; /**
* 获取键值对数量
*/
this.size = function(){
return this.keys.length;
}; this.containsKey=function(key){
return this.keys.filter(function(v){
if(v===key){
return key;
}
}).length>0;
};
/**
* 重写toString
*/
this.toString = function(){
var s = "{";
for(var i=0;i<this.keys.length;i++){
var k = this.keys[i];
s += k+"="+this.data[k];
if(this.keys.length>i+1){
s+=','
}
}
s+="}";
return s;
};
/**
* 解析字符串到Map
* {a=A,b=B,c=B,}
*/
this.parserStringAndAddMap=function(str){
var count=0;
if(str && str.length>0){
str=str.trim();
var startIndex=str.indexOf("{"),endIndex=str.lastIndexOf("}");
if(startIndex!==-1 && endIndex!==-1){
str=str.substring(startIndex+1,endIndex);
var arrs= str.split(",");
for(var i=0;i<arrs.length;i++){
var kv=arrs[i].trim();
if(kv.length>0 && kv.indexOf("=")!==-1){
var kv_arr=kv.split("=");
if(kv_arr.length==2){
if(this.put(kv_arr[0].trim(),kv_arr[1].trim())){
count++;
}else{
console.error('error: kv:'+kv);
} }
}
}
}else{
console.log("data error:"+str);
}
}else{
console.log('data is not empty');
}
return count;
};
}

JavaScript 实现Map的更多相关文章

  1. JavaScript之Map对象

    前言 工欲善其事,必先利其器.这是一款以前在前端项目中没有使用过的.有趣的对象,咱来看看如何使用~ 并非arrayObj.map(function) //arrayObj.map与arrayObj.f ...

  2. JavaScript之map与parseInt的陷阱

    问题来源 ​ 这个问题的来源是学习廖雪峰老师JS教程.问题如下:小明希望利用map()把字符串变成整数,他写的代码很简洁: 'use strict'; var arr = ['1', '2', '3' ...

  3. javascript自定义Map对象

    javascript定义map对象开发前端组件的重要性就不过多阐述了,直接参考以下案例即可 <script type=text/javascript charset=utf-8> func ...

  4. JavaScript的Map和Set

    JavaScript的Map和Set 1.map:映射(通过key获得value).增.删 2.set:增.删.判断是否包含某个元素 1. Map <!DOCTYPE html><h ...

  5. JavaScript创建Map对象(转)

    JavaScript 里面本身没有map对象,用JavaScript的Array来实现Map的数据结构. /* * MAP对象,实现MAP功能 * * 接口: * size()     获取MAP元素 ...

  6. JavaScript Source Map 详解

    源码地址: http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html 上周,jQuery 1.9发布. 这是2.0版之前的最后 ...

  7. javascript google map circle radius_changed ,angularjs google map circle radius_changed

    javascript: var cityCircle = new google.maps.Circle({ strokeColor: '#FF0000', strokeOpacity: 0.8, st ...

  8. JavaScript中Map和ForEach的区别

    译者按: 惯用Haskell的我更爱map. 原文: JavaScript — Map vs. ForEach - What’s the difference between Map and ForE ...

  9. 如何实现JavaScript的Map和Filter函数?

    译者按: 鲁迅曾经说过,学习JavaScript最好方式莫过于敲代码了! 原文: Master Map & Filter, Javascript’s Most Powerful Array F ...

  10. javascript之Map

    javascript中的map,我用的不是特别多,倒是Java中的Map或HashMap,经常用. 顺便围绕几个方面介绍一下map? 1.Map对象 Map对象是一种有对应键值对的对象,JS的Obje ...

随机推荐

  1. Asp.net MVC学习--默认程序结构、工作流程

    二.MVC 默认程序结构 MVC新建好之后,会对应的出现几个包,分别是:Controller.Model.View --即MVC 其中的默认的Default.aspx文件可以方便url重写,如果不设置 ...

  2. linux搭建php

    http://www.cnblogs.com/wubaiqing/archive/2011/11/08/2241195.html 四,启动php-fpm & Nginx /usr/local/ ...

  3. The Suspects(并查集求节点数)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 28164   Accepted: 13718 De ...

  4. SDOTOJ2088 refresh的停车场(栈和队列)

     refresh的停车场 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit S ...

  5. dataset 用法(1)

    DataSet是表和列结构在内存中的表示方式,DataSet支持多表.表间关系.数据约束等,和关系数据库的模型基本一致.(本质上是微型的数据库.包含一组DataTable对象和DataTable之间的 ...

  6. 2014.8.30.ref,out,params,enum,递归

    (一)ref 函数形参变量的输入有两种方式:传值,传址.而ref则为传址.eg: static int Add(ref int n) { Console.WriteLine("Add---- ...

  7. SQL server 和Oracle 序列

    1,SQL Server序列创建与使用 BEGIN IF EXISTS (SELECT * FROM sysobjects WHERE name = 'event_seq') DROP SEQUENC ...

  8. Unity StrangeIoc框架 (三)signal信号方式

    先创建TestRoot using UnityEngine; using System.Collections; using strange.extensions.context.impl; publ ...

  9. cocostudio导出plist文件

    今天在用Armature类时用到cocostudio导出文件,由于美术的原因他使用的是中文命名法(这你敢相信),后面在导入程序中跟了下代码发现是解析plist文件有误,我就来比较正常功能文件和有错文件 ...

  10. spring 入门篇

    spring 入门篇         相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处 ...