javascript的一个map实现
很早收集的,不知道是从哪里流传出来,整理下分享给大家function Map() {// 底层保存数据结构var struct = function(key, value) {this.key = key;this.value = value;};// 如果key相同值会被覆盖var put = function(key, value) {for ( var i = 0; i < this.size(); i++) {if (this.arr.key === key) {this.arr.value = value;return;}}this.arr = new struct(key, value);};// 根据key获取值var get = function(key) {for ( var i = 0; i < this.size(); i++) {if (this.arr.key === key) {return this.arr.value;}}return null;};// 删除var remove = function(key) {for ( var i = 0; i < this.size(); i++) {if (this.arr.key === key) {this.arr.splice(i, 1);}}};var size = function() {return this.arr.length;};var isEmpty = function() {return this.size() <= 0;};// 迭代所有keyvar listKeys = function() {var key = [];for ( var i = 0; i < this.size(); i++) {key.push(this.arr.key);}return key;};var methodParamNames = function(method) {var names = new Array;for ( var i = 0; i < this.size(); i++) {if (this.arr.key.indexOf(method + '_') >= 0) {var vals = this.arr.key.split("_");if (vals != "result")names.push(vals);}}return names;};// 暴露私有方法this.arr = new Array();this.get = get;this.put = put;this.remove = remove;this.size = size;this.isEmpty = isEmpty;this.methodParamNames = methodParamNames;this.keys = listKeys;}
简单的测试:
var map = new Map();map.put("name", "robin");map.put("1", "aaaa");map.put(1, "bbbb");console.log(map.arr);console.log(map.size());console.log(map.keys());console.log(map.get("1"));map.remove(1);console.log(map.size());
页:
[1]