JavaScript中實(shí)現(xiàn)Map的示例代碼
不廢話了,直接貼代碼了。
代碼一:
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();
/**
* 放入一個(gè)鍵值對(duì)
* @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;
};
/**
* 獲取某鍵對(duì)應(yīng)的值
* @param {String} key
* @return {Object} value
*/
this.get = function(key) {
return this.data[key];
};
/**
* 刪除一個(gè)鍵值對(duì)
* @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,執(zhí)行處理函數(shù)
*
* @param {Function} 回調(diào)函數(shù) 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);
}
};
/**
* 獲取鍵值數(shù)組
* @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;
};
/**
* 獲取鍵值對(duì)數(shù)量
*/
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;
};
}
代碼二:
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() {
/** 存放鍵的數(shù)組(遍歷用到) */
this.keys = new Array();
/** 存放數(shù)據(jù) */
this.data = new Object();
/**
* 放入一個(gè)鍵值對(duì)
* @param {String} key
* @param {Object} value
*/
this.put = function(key, value) {
if(this.data[key] == null){
this.keys.push(key);
}
this.data[key] = value;
};
/**
* 獲取某鍵對(duì)應(yīng)的值
* @param {String} key
* @return {Object} value
*/
this.get = function(key) {
return this.data[key];
};
/**
* 刪除一個(gè)鍵值對(duì)
* @param {String} key
*/
this.remove = function(key) {
this.keys.remove(key);
this.data[key] = null;
};
/**
* 遍歷Map,執(zhí)行處理函數(shù)
*
* @param {Function} 回調(diào)函數(shù) 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);
}
};
/**
* 獲取鍵值數(shù)組(類似Java的entrySet())
* @return 鍵值對(duì)象{key,value}的數(shù)組
*/
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;
};
/**
* 獲取鍵值對(duì)數(shù)量
*/
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+"="+this.data[k];
}
s+="}";
return s;
};
}
function testMap(){
var m = new Map();
m.put('key1','Comtop');
m.put('key2','南方電網(wǎng)');
m.put('key3','景新花園');
alert("init:"+m);
m.put('key1','康拓普');
alert("set key1:"+m);
m.remove("key2");
alert("remove key2: "+m);
var s ="";
m.each(function(key,value,index){
s += index+":"+ key+"="+value+"\n";
});
alert(s);
}
以上內(nèi)容通過(guò)兩段代碼給大家分享了JavaScript中實(shí)現(xiàn)Map,希望大家喜歡。
相關(guān)文章
JavaScript中正則表達(dá)式判斷匹配規(guī)則及常用方法
JS作為一門常用于web開發(fā)的語(yǔ)言,必然要具備正則這種強(qiáng)大的特性,本文將對(duì)JS中的正則用法及常用函數(shù)進(jìn)行一番總結(jié)2017-08-08
JS利用window.print()實(shí)現(xiàn)網(wǎng)頁(yè)打印功能
print作為瀏覽已經(jīng)比較成熟的技術(shù)可以經(jīng)常被用來(lái)打印頁(yè)面的部分內(nèi)容。本文將在JS中調(diào)用window.print()方法實(shí)現(xiàn)網(wǎng)頁(yè)打印功能,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-04-04
微信小程序基于slider組件動(dòng)態(tài)修改標(biāo)簽透明度的方法示例
這篇文章主要介紹了微信小程序基于slider組件動(dòng)態(tài)修改標(biāo)簽透明度的方法,可通過(guò)slider組件拖動(dòng)實(shí)現(xiàn)圖片透明度的改變功能,涉及微信小程序事件綁定、base64格式圖片載入及slider組件使用技巧,需要的朋友可以參考下2017-12-12
詳解JavaScript如何實(shí)現(xiàn)并發(fā)控制的Promise隊(duì)列調(diào)度器
Promise是JavaScript中一種處理異步操作的技術(shù),提供了一種更優(yōu)雅的方式來(lái)處理并發(fā)任務(wù)和串行化操作,本文主要介紹了實(shí)現(xiàn)并發(fā)控制的Promise隊(duì)列調(diào)度器的方法,需要的可以參考一下2023-07-07
js內(nèi)置對(duì)象處理_打印學(xué)生成績(jī)單的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇js內(nèi)置對(duì)象處理_打印學(xué)生成績(jī)單的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
JS字符串轉(zhuǎn)換為數(shù)組的4 個(gè)方法示例小結(jié)
這篇文章主要介紹了JS字符串轉(zhuǎn)換為數(shù)組的4 個(gè)方法示例小結(jié),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12

