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. getElementByID、getElementsByName、getElementsByTagName实例详解

    getElementByID.getElementsByName.getElementsByTagName实例详解 本文通过实例,详细介绍了getElementByID.getElementsByNa ...

  2. Python核心编程笔记---- print

    在仅用变量名时,输出的字符串是用单引号括起来的.这个是为了让非字符串对象也可能以字符的形式显示在屏幕上. 而print 函数打印出来的是变量的值. print 调用的是str()方法.而仅用变量名时调 ...

  3. 如何解决”无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。“

    字段Time在数据库中为datetime类型 dr.GetString(3).ToString() dr.GetString(3).ToString() => dr.GetDateTime(3) ...

  4. Android SD卡创建文件和文件夹失败

    原文:Android SD卡创建文件和文件夹失败 功能需要,尝试在本地sd卡上创建文件和文件夹的时候,报错,程序崩溃. 一般情况下,是忘记给予sd卡的读写权限.但是这里面权限已经给了,还是报错. 在网 ...

  5. 第五章 Spring3.0 、Hibernate3.3与Struts2的整合

    5.1整合Spring与Hibernate 5.1.1使用MyEclipse加入Spring与Hibernate功能 使用MyEclipse工具主要是为了让工程拥有把数据表生成实体类与映射的功能.然后 ...

  6. centos6.5vpn搭建

    centos6.5vpn搭建整个搭建流程,服务端,客户端安装及测试. 达到的效果: 在安装vpn客户端的机器可通过vpn(virtual private network)专用线路(vpn主配置文件中定 ...

  7. Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET

    Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET Boost::Thread使用示例 分类: C/C++ 2011-07-06 14:48 5926 ...

  8. 【leetcode边做边学】二分查找应用

    很多其它请关注我的HEXO博客:http://jasonding1354.github.io/ 简书主页:http://www.jianshu.com/users/2bd9b48f6ea8/lates ...

  9. oracle11g ora-12514监听程序当前无法识别

    环境:win7_x64 ,oracle11g 描写叙述:1第一天没问题,第二天就不能连接: 2:pl sql developer连接工具,自己安装的oracle数据库,又装了client 3:装了or ...

  10. bp神经网络及matlab实现

    本文主要内容包含: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例  本文以Fisher的Iris数据集 ...