JS 有序键值Map对的实现

构造:

function Map() {
  this.keys = new Array();
  this.data = new Array();
  //添加键值对
  this.set = function (key, value) {
    if (this.data[key] == null) {//如键不存在则身【键】数组添加键名
      this.keys.push(value);
    }
    this.data[key] = value;//给键赋值
  };
  //获取键对应的值
  this.get = function (key) {
    return this.data[key];
  };
  //去除键值,(去除键数据中的键名及对应的值)
  this.remove = function (key) {
    this.keys.remove(key);
    this.data[key] = null;
  };
  //判断键值元素是否为空
  this.isEmpty = function () {
    return this.keys.length == 0;
  };
  //获取键值元素大小
  this.size = function () {
    return this.keys.length;
  };
  //遍历Map,执行处理函数. 回调函数 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);
    }
  };
  //获取键值数组,返回键值对象{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;
  };
  //重写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","value1");
    m.put("key2","value2");
    m.put("key3","value3");
    alert("init:"+m);   

    m.put("key1","value4");
    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);
}  
时间: 2024-10-27 10:32:23

JS 有序键值Map对的实现的相关文章

浅谈js的键值对key和value

> 昨晚无意中看到类似下面结构的一段代码的取值问题,引起我的兴趣,花了点时间写了个demo给大家分享一下... var obj = [ {"2011":{"name":"jyjin","age":20}}, {"2012":{"name":"jyjin","age":21}} ]; var obj1 = { "2013":

Map获取键值,Map的几种遍历方法

Map 类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集.接着,Map.Entry类提供了一个 getKey()方法和一个getValue()方法,Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值. 法一: Map<String, String> map = new HashMap(); for (Map.Entry entry : map.entrySet()) { Object key = entr

js对象替换键值名称

js对象替换键值名称 将obj中的id和name字段替换分别替换成为"@id","@name" 代码如下: let obj = [{id:1,name:"张三"},{id:2,name:"李四"}].map(function (item) { return{ "@id":item.id, "@name":item.name } }) 对于对象 let obj = { id:1, name

如何在STL的map中使用结构体作为键值

这里首先给出容器map的原型: template < class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map{ ... } 可以看到模板参数一共有四个,第一个就是Key,即键:第二个就是值:第四个就是空间配置器,默认使用alloc(随STL版本不同而不同).那么第三个是啥? 我们知道,map的底层数据结构,其实是树,更确切的说,是一个RB-tree(红黑树).RB-tree树在进行插

std::map使用结构体自定义键值

使用STL中的map时候,有时候需要使用结构题自定义键值,比如想统计点的坐标出现的次数 struct Node{ int x,y; }; ...... map<Node,int>mp; mp[(Node){x,y}]++; 这样子的话,会出现一堆报错 c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_function.h||In instantiation of 'bool std::less<_Tp>::operator()(

Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值

1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对  思路:  A: 获取所有结婚证的集合  B: 遍历结婚证的集合,得到每一个结婚证  C: 根据结婚证获取丈夫和妻子 转换:  A: 获取所有键值对对象的集合  B: 遍历键值对对象的集合,得到每一个键值对对象  C: 根据键值对对象获取键和值 2. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 impo

各种Map的区别,想在Map放入自定义顺序的键值对

今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接

Java记录 -63- Java的键值映射Map

public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. Map接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序.某些映射实现可明确保证其顺序,如 TreeMap 类:另一些映射实现则不保证顺序,如 HashMap 

用字典给Model赋值并支持map键值替换

这个是昨天教程的升级版本,支持键值的map替换. 源码如下: NSObject+Properties.h 与 NSObject+Properties.m // // NSObject+Properties.h // // Created by YouXianMing on 14-9-4. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> @interface