JavaScript Map数据结构
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数据结构的更多相关文章
- JavaScript(ES6)学习笔记-Set和Map数据结构(一)
一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...
- javascript中的Set和Map数据结构
Set数据结构 类似数组,所有的数据都是唯一的,没有重复值,它本身是一个构造函数 size 数据长度 add() 添加一个数据 delete() 删除一个数据 has() 查找一个数据 clear() ...
- ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...
- ECMAScript 6之Set和Map数据结构
Set 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, ...
- es6学习笔记-set和map数据结构
ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...
- js-ES6学习笔记-Set和Map数据结构
1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Set 函数可以接受一个数组(或类似数组的对 ...
- Map 数据结构
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制. 为了解决这个问题,ES6 提供了 Map 数据结构. ...
- Set和Map数据结构
1.Set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Map JavaScript 的对象 ...
- es6笔记(5)Map数据结构
概要 字典是用来存储不重复key的Hash结构.不同于集合(Set)的一点,字典使用的是[key,value]的形式来存储数据. JavaScript的对象(Object:{})只能用字符串当做key ...
随机推荐
- SQLSERVER SQL性能优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效) SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving ta ...
- ABAP术语-HTML
HTML 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/19/1073298.html Hypertext Markup Language( ...
- Ubuntu16.04采用FastCGI方式部署Flask web框架
1 部署nginx 1.1 安装nginx服务 root@desktop:~# apt-get install nginx -y 1.2 验证nginx服务是否启动 root@des ...
- 使用SQLite删除Mac OS X 中launchpad里的快捷方式
一般情况下,从App Store安装的应用程序,如果应用删除,那么launchpad里对应的图标会一起删除了. 而对于不是通过App Store安装的应用程序,删除应用程序,Launchpad中很可能 ...
- Java学习笔记十二:Java中方法的重载
Java中方法的重载 什么是方法的重载呢? 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 s ...
- HyperLedger Fabric 1.4 交易流程(6.3)
区块链最主要的特性之一是去中心化,没有了中心机构的集中处理,为了达成数据的一致性,就需要网络中全民参与管理,并以某种方法达成共识,所以区块链的交易流程也就是共识的过程. 在Fabric中, ...
- python2.7练习小例子(二十七)
27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. #!/usr/bin/python # -*- coding: UTF-8 -* ...
- json格式转化
python: json.dumps() : dict转成str json.loads():str转成dict (去除字符串eva() ) JS: JSON.parse(text[, reviver ...
- 各种数据库分页语句整理以及Oracle数据库中的ROWNUM和ORDER BY的区别
.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=s ...
- List中的FindAll用法
在泛型List中查找符合某个字段的全部数据,可以采用如下方式: //1.现将实体数据listList<ADDaAn> objDAList = db.ADDaAns.ToList(); // ...