首頁 > web前端 > js教程 > JavaScript中實作Map的範例程式碼_javascript技巧

JavaScript中實作Map的範例程式碼_javascript技巧

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-05-16 15:39:56
原創
1361 人瀏覽過

不廢話了,直接貼程式碼了。

代碼一:

1

2

3

4

5

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

登入後複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

function Map() {

  this.keys = new Array();

  this.data = new Object();

  /**

   * 放入一个键值对

   * @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;

  };

  /**

   * 获取某键对应的值

   * @param {String} key

   * @return {Object} value

   */

  this.get = function(key) {

    return this.data[key];

  };

  /**

   * 删除一个键值对

   * @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,执行处理函数

   *

   * @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);

    }

  };

  /**

   * 获取键值数组

   * @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;

  };

  /**

   * 获取键值对数量

   */

  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;

  };

}

登入後複製

代碼二:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

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();

  /**

   * 放入一个键值对

   * @param {String} key

   * @param {Object} value

   */

  this.put = function(key, value) {

    if(this.data[key] == null){

      this.keys.push(key);

    }

    this.data[key] = value;

  };

  /**

   * 获取某键对应的值

   * @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+"="+this.data[k];

    }

    s+="}";

    return s;

  };

}

登入後複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function testMap(){

  var m = new Map();

  m.put('key1','Comtop');

  m.put('key2','南方电网');

  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);

}

登入後複製

以上內容透過兩段程式碼給大家分享了JavaScript中實現Map,希望大家喜歡。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
javascript - js 原生map
來自於 1970-01-01 08:00:00
0
0
0
javascript - charles map remote映射問題
來自於 1970-01-01 08:00:00
0
0
0
物件映射函數:將Map函數擴展到物件
來自於 1970-01-01 08:00:00
0
0
0
javascript - es6 中map一次得到全部的values
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板