• 首页
  • 小学语文
  • 中学语文
  • 中学英语
  • 免费论文
  • 教学随笔
  • 学生作文
  • 综合考试
  • 试题教案
  • 育儿话题
  • 教学资源
  • 编程技术
  • 博客
  • 用Javascript写的一个映射表(MAP)类--续

    日期:2003-03-16  地址:  作者:

    序:本来是想修改一下上一次写的文章http://dev.csdn.net/Develop/article/27/27499.shtm,可CSDN不知怎么不能修改了,因此,只好重新增加。

    有必要在这里说明一下写这个映射表类的目的,它来自于一个ASP项目开发中的灵感,具体是用户权限的管理和查询:

    在设计用户user -> 角色roles时,用","号将用户属于的多个角色ID分开,以判断用户所属的哪些角色。在客户端的界面是两个select下拉框,左边的是人员user,右边的是角色roles,在左边的select中选择一个user,右边应能显示相应的角色,如果采用将用户ID递送至服务端查询并更新右边的用户角色,性能和效率都比较低。因此,如果将user -> roles保存在客户端,具体操作是在初始化页面时,将用户权限表中已查询到的用户和角色保存在映射表中(注意:映射表是在客户端中的,而查询是在服务端),当需要查询某个用户(用户作为关键字key)具有哪些角色(角色作为value)时,就直接映射表中查询(lookup),由于一个用户存在多个角色,所以映射表类也作了相应改动,以前的映射表类中的key关键字是不允许有重复的,现在允许有重复的关键字,相应的查询的返回值会有多个,因而返回值为数组类型。

    例如,user_a用户有role_a和role_b两种角色,可以作下面的操作:

    map.setAt("user_a", "role_a");

    map.setAt("user_a", "role_b");

    查询user_a的角色时,用map.lookUp("user_a")方法,这将返回一个数组对象,所有的角色将保存在这个返回的数组中。

    修正后的代码如下:// 注意:下面被注释的代码,在上一个版本中存在

    function struct(key, value){

      this.key = key;
      this.value = value;

    }

    function setAt(key, value){
      /*
      for (var i = 0; i < this.map.length; i++)
      {
        if ( this.map[i].key === key )
        {
          this.map[i].value = value;
          return;
        }
      }
      */
      this.map[this.map.length] = new struct(key, value);

    }

    function lookUp(key)
    {
      var arr = new Array();
      var j = 0;
     
      for (var i = 0; i < this.map.length; i++)
      {
        if ( this.map[i].key === key )
        {
          arr[j++] = this.map[i].value;
          //return this.map[i].value;
        }
      }
     
      return arr;
    }

    function removeKey(key)
    {
      var v;
      for (var i = 0; i < this.map.length; i++)
      {
        v = this.map.pop();
        if ( v.key === key )
          continue;
         
        this.map.unshift(v);
      }
    }

    function getCount(){
      return this.map.length;
    }

    function isEmpty(){
      return this.map.length <= 0;
    }

    function classMap() {

      this.map = new Array();

      this.lookUp = lookUp;
      this.setAt = setAt;
      this.removeKey = removeKey;
      this.getCount = getCount;
      this.isEmpty = isEmpty;
    }

    最后阐述一点:这只是一方面的应用,你可能会把它应用到其它业务逻辑的实现上,如果有更好的想法请与我联系yjgx@sina.com

    对 用Javascript写的一个映射表(MAP)类--续 文章的评论    [查看网友评论]

    验证码:
    匿名发表: