欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中利用Array和Object實(shí)現(xiàn)Map的方法

 更新時(shí)間:2015年07月27日 12:13:25   作者:草緣飛鷹  
這篇文章主要介紹了JavaScript中利用Array和Object實(shí)現(xiàn)Map的方法,實(shí)例分析了javascript實(shí)現(xiàn)map的添加、獲取、移除、清空、遍歷等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了JavaScript中利用Array和Object實(shí)現(xiàn)Map的方法。分享給大家供大家參考。具體如下:

昨天突然看到以前別人用JavaScript實(shí)現(xiàn)的Map感覺很不錯(cuò),但是發(fā)現(xiàn)有個(gè)別方法有問題,順便完善了下,添加了 remove 、indexOf 、values、clear等方法。

/**
 * @author blune68
 * @version 0.1, 07/27/12
 * 
 */
function Map(){
  this.keys = new Array(); 
  this.data = new Object();
  var toString = Object.prototype.toString;
  /**
   * 當(dāng)前Map當(dāng)前長(zhǎng)度
   */
  this.size = function(){
    return this.keys.length;
  }
  /**
   * 添加值
   * @param {Object} key
   * @param {Object} value
   */
  this.put = function(key, value){
    if(this.data[key] == null){
      this.data[key] = value;
    }
    this.keys.push(key);
  }
  /**
   * 根據(jù)當(dāng)前key獲取value
   * @param {Object} key
   */
  this.get = function(key){
    return this.data[key];
  }
  /**
   * 根據(jù)當(dāng)前key移除Map對(duì)應(yīng)值
   * @param {Object} key
   */
  this.remove = function(key){
    var index = this.indexOf(key);
    if(index != -1){
      this.keys.splice(index, 1);
    }
    this.data[key] = null;
  }
  /**
   * 清空Map
   */
  this.clear = function(){
    for(var i=0, len = this.size(); i < len; i++){
      var key = this.keys[i];
      this.data[key] = null;
    }
    this.keys.length = 0;
  }
  /**
   * 當(dāng)前key是否存在
   * @param {Object} key
   */
  this.containsKey = function(key){
    return this.data[key] != null;
  }
  /**
   * 是否為空
   */
  this.isEmpty = function(){
    return this.keys.length === 0;
  }
  /**
   * 類型Java中Map.entrySet
   */
  this.entrySet = function(){
    var size = this.size();
    var datas = new Array(size);
    for (var i = 0, len = size; i < len; i++) {
      var key = this.keys[i];
      var value = this.data[key];
      datas[i] = {
        'key' : key,
        'value':value  
      }
    }
    return datas;
  }
  /**
   * 遍歷當(dāng)前Map
   * var map = new Map();
   * map.put('key', 'value');
   * map.each(function(index, key, value){
   *   console.log("index:" + index + "--key:" + key + "--value:" + value)
   * })
   * @param {Object} fn
   */
  this.each = function(fn){
    if(toString.call(fn) === '[object Function]'){
      for (var i = 0, len = this.size(); i < len; i++) {
        var key = this.keys[i];
        fn(i, key, this.data[key]);
      }
    }
    return null;
  }
  /**
   * 獲取Map中 當(dāng)前key 索引值
   * @param {Object} key
   */
  this.indexOf = function(key){
    var size = this.size();
    if(size > 0){
      for(var i=0, len=size; i < len; i++){
        if(this.keys[i] == key)
        return i;
      }
    }
    return -1;
  }
  /**
   * Override toString
   */
  this.toString = function(){
    var str = "{";
    for (var i = 0, len = this.size(); i < len; i++, str+=",") {
      var key = this.keys[i];
      var value = this.data[key];
      str += key + "=" + value; 
    }
    str = str.substring(0, str.length-1);
    str += "}";
    return str;
  }
  /**
   * 獲取Map中的所有value值(Array)
   */
  this.values = function(){
    var size = this.size();
    var values = new Array();
    for(var i = 0; i < size; i++){
      var key = this.keys[i];
      values.push(this.data[key]);
    }
    return values;
  }
}

希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • js活用事件觸發(fā)對(duì)象動(dòng)作

    js活用事件觸發(fā)對(duì)象動(dòng)作

    現(xiàn)在基本上我很少在對(duì)象里面寫事情觸發(fā)行為了,因?yàn)楦杏X那樣做相同的對(duì)象代碼利用率太低,容易導(dǎo)致代碼冗余.
    2008-08-08
  • 選擇指定數(shù)量后checkbox不可選(變灰)javascript代碼

    選擇指定數(shù)量后checkbox不可選(變灰)javascript代碼

    選擇指定數(shù)量后checkbox不可選(變灰)javascript代碼
    2009-06-06
  • JavaScript模擬文件拖選框樣式v1.0的實(shí)例

    JavaScript模擬文件拖選框樣式v1.0的實(shí)例

    下面小編就為大家?guī)硪黄狫avaScript模擬文件拖選框樣式v1.0的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • uniapp定義動(dòng)畫的幾種方式總結(jié)

    uniapp定義動(dòng)畫的幾種方式總結(jié)

    我們都知道,動(dòng)畫其實(shí)是由一幀一幀圖片組成,快遞地播放一組圖片就形成了動(dòng)畫,下面這篇文章主要給大家介紹了關(guān)于uniapp定義動(dòng)畫的幾種方式,需要的朋友可以參考下
    2023-02-02
  • 一文帶你深入理解JavaScript模板引擎

    一文帶你深入理解JavaScript模板引擎

    在Web前端開發(fā)中,需要將數(shù)據(jù)動(dòng)態(tài)渲染到頁(yè)面上,隨著應(yīng)用程序的復(fù)雜度增加,數(shù)據(jù)渲染的邏輯也變得越來越復(fù)雜,這時(shí)候就需要使用模板引擎來幫助我們動(dòng)態(tài)生成HTML標(biāo)記,本文將深入介紹 JavaScript 模板引擎,幫助讀者更好地理解和應(yīng)用模板引擎
    2023-06-06
  • 從URL中提取參數(shù)與將對(duì)象轉(zhuǎn)換為URL查詢參數(shù)的實(shí)現(xiàn)代碼

    從URL中提取參數(shù)與將對(duì)象轉(zhuǎn)換為URL查詢參數(shù)的實(shí)現(xiàn)代碼

    這兩種主要是對(duì)《Prototype淺析》先前略過的Sring部分中toQueryParams和Object部分的toQueryString方法的補(bǔ)充
    2012-01-01
  • layui實(shí)現(xiàn)圖片虛擬路徑上傳,預(yù)覽和刪除的例子

    layui實(shí)現(xiàn)圖片虛擬路徑上傳,預(yù)覽和刪除的例子

    今天小編就為大家分享一篇layui實(shí)現(xiàn)圖片虛擬路徑上傳,預(yù)覽和刪除的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Vuex模塊化應(yīng)用實(shí)踐示例

    Vuex模塊化應(yīng)用實(shí)踐示例

    這篇文章主要介紹了Vuex模塊化應(yīng)用實(shí)踐示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 老生常談原生JS執(zhí)行環(huán)境與作用域

    老生常談原生JS執(zhí)行環(huán)境與作用域

    下面小編就為大家?guī)硪黄仙U勗鶭S執(zhí)行環(huán)境與作用域。小編覺得挺不錯(cuò)的,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-11-11
  • 用javascript獲取textarea中的光標(biāo)位置

    用javascript獲取textarea中的光標(biāo)位置

    Javascript一向以他的靈活隨意而著稱,這也使得它的功能可以非常的強(qiáng)大,而由于沒有比較好的調(diào)試工具,又使得它使用起來困難重重,尤其使對(duì)于一些初學(xué)者,更是感覺到無從下手。今天探討的問題是用javascript獲取textarea中光標(biāo)的位置。
    2008-05-05

最新評(píng)論