很早收集的,不知道是从哪里流传出来,整理下分享给大家
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[i].key === key) { this.arr[i].value = value; return; } } this.arr[this.arr.length] = new struct(key, value); }; // 根据key获取值 var get = function(key) { for ( var i = 0; i < this.size(); i++) { if (this.arr[i].key === key) { return this.arr[i].value; } } return null; }; // 删除 var remove = function(key) { for ( var i = 0; i < this.size(); i++) { if (this.arr[i].key === key) { this.arr.splice(i, 1); } } }; var size = function() { return this.arr.length; }; var isEmpty = function() { return this.size() <= 0; }; // 迭代所有key var listKeys = function() { var key = []; for ( var i = 0; i < this.size(); i++) { key.push(this.arr[i].key); } return key; }; var methodParamNames = function(method) { var names = new Array; for ( var i = 0; i < this.size(); i++) { if (this.arr[i].key.indexOf(method + '_') >= 0) { var vals = this.arr[i].key.split("_"); if (vals[2] != "result") names.push(vals[1]); } } 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());