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(); this.maxSize = arguments[0] ? arguments[0] : 0; /**
* 放入一个键值对
*
* @param {String}
* key
* @param {Object}
* value
*/
this.put = function (key, value) {
if (this.data[key] == null) {
this.keys.push(key);
}
this.data[key] = value;
}; /**
* 放入一个键值对, FIFO容量移除策略
*
* @param {String}
* key
* @param {Object}
* value
*/
this.putQ = function (key, value) {
if (this.data[key] == null) {
this.keys.push(key);
}
this.data[key] = value;
this.trimToSize(this.maxSize);
}; this.trimToSize = function (max_size) {
var tmpSize = this.size;
if (tmpSize > max_size) {
this.each(function (key, value, index) {
if (index < tmpSize - max_size) {
this.remove(key);
}
});
}
} /**
* 获取某键对应的值
*
* @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 + "=" + JSON.stringify(this.data[k]);
}
s += "}";
return s;
};
} function testMap() {
var m = new Map();
m.put('key1', 'v1');
m.put('key2', 'v2');
m.put('key3', 'v3');
m.put('key4', 'v4');
alert("init:" + m); m.put('key1', 'v5');
alert("set key1:" + m); m.remove("key2");
alert("remove key2: " + m); var s = "";
m.each(function (key, value, index) {
if (index < 2) {
m.remove(key);
}
}); m.each(function (key, value, index) {
s += index + ":" + key + "=" + value + "\n";
});
alert(s);
}

prototype是原型,通过原型调用方法,后续会总结一下。

 

 整个map相当于一个json对象,map = {keys : arr,values : abc,}  就是这种形式。通过map来存取数据,但不能存储大数据。

这就是数据结构,太重要了。

JavaScript Map数据结构的更多相关文章

  1. JavaScript(ES6)学习笔记-Set和Map数据结构(一)

    一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...

  2. javascript中的Set和Map数据结构

    Set数据结构 类似数组,所有的数据都是唯一的,没有重复值,它本身是一个构造函数 size 数据长度 add() 添加一个数据 delete() 删除一个数据 has() 查找一个数据 clear() ...

  3. ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环

    ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...

  4. ECMAScript 6之Set和Map数据结构

    Set 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, ...

  5. es6学习笔记-set和map数据结构

    ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...

  6. js-ES6学习笔记-Set和Map数据结构

    1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Set 函数可以接受一个数组(或类似数组的对 ...

  7. Map 数据结构

    JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制. 为了解决这个问题,ES6 提供了 Map 数据结构. ...

  8. Set和Map数据结构

    1.Set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Map JavaScript 的对象 ...

  9. es6笔记(5)Map数据结构

    概要 字典是用来存储不重复key的Hash结构.不同于集合(Set)的一点,字典使用的是[key,value]的形式来存储数据. JavaScript的对象(Object:{})只能用字符串当做key ...

随机推荐

  1. git使用简介(二)

    附上廖雪峰老师Git教程https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 远程仓库 ...

  2. js中FormData+XMLHttpRequest数据传输

    前言: 首先我们需要了解,前后端进行数据传输依赖于浏览器的XMLHttpRequest对象 一.什么是XMLHttpRequest对象? XMLHttpRequest 是DOM对象,提供了对于http ...

  3. 小程序登录 -41003: aes 小程序加密数据解密失败问题

    在微信小程的开发中,登录问题,一定要按照这样的顺序 1. 小程序请求login,拿到code 然后传给服务端:  2.服务端拿到code 到微信服务器拿到sessionKey :3.然后小程序调用ge ...

  4. mysql主从延时临时解决办法

    主从延时临时解决办法: 主从延迟严重的原因很多,其中有以下原因: 一.由于无主键大表的delete 和update导致. mysql  主从复制时.如果表上没有主键.会导致update和delete操 ...

  5. webug学习(1)

    webug的题目,比较简单,拿来巩固一哈. 1. 一看就知道是注入漏洞了,啥也不说sqlmap直接开炮. 先-u 之后-u 网址 --current-db 获取当前网址的数据库 所以当前数据库就是 p ...

  6. python--基本类型之字符串

    String(字符串): 定义和创建字符串: 定义:字符串是一个有序的字符的集合,用于存储和表示基本的文本信息.注意:字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内 var1='Hel ...

  7. python2.7练习小例子(二十七)

        27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.      #!/usr/bin/python # -*- coding: UTF-8 -* ...

  8. Ehcache缓存实例

    一:目录 EhCache 简介 Hello World 示例 Spring 整合 Dummy CacheManager 的配置和作用 二: 简介 1. 基本介绍 EhCache 是一个纯Java的进程 ...

  9. RelativeSource设定绑定方向

    <Window x:Class="Yingbao.Chapter2.RelativeEx.AppWin" xmlns="http://schemas.microso ...

  10. Mysql数据库的压力

    rationalError: (2006, 'MySQL server has gone away') 2017年10月10日 20:04:43 阅读数:377 问题描述 使用django+celer ...