/*
Dictionary类:本类实现了字典功能,所有方法、属性都模仿System..Collection.Generic.Dictionary类 构造函数:
Dictionary()
属性:
CompareMode:比较模式,0——二进制 1——文本 Count:字典中的项目数
ThrowException:遇到错误时,是否抛出异常 方法: Item(key):获取指定键对应的值 Keys():获取键数组
Values():获取值数组 Add(key,value):将指定的键和值添加到字典中 BatchAdd(keys,values):尝试将指定的键和值数组添加到字典中,如果全部添加成功,返回true;否则返回false。 Clear():清除字典中的所有项
ContainsKey(key):字典中是否包含指定的键
ContainsValue(value):字典中是否包含指定的值 Remove(key):删除字典中指定的键
TryGetValue(key,defaultValue):尝试获取字典中指定键对应的值,如果键不存在,返回默认值 ToString():返回字典中所有键和值组成的字符串,格式为“逗号分隔的键列表 分号 逗号分隔的值列表” var dic =new Dictionary();
dic.Add('11','1');
if(dic.ContainsKey('22')){
alert(dic.Item('22'));
}
dic.Clear();
*/ function Dictionary() {
var me = this; //将this指针保存到变量me中 this.CompareMode = 1; //比较关键字是否相等的模式,0——二进制;1——文本 this.Count = 0; //字典中的项目数 this.arrKeys = new Array(); //关键字数组 this.arrValues = new Array(); //值数组 this.ThrowException = true; //遇到错误时,是否用throw语句抛出异常 this.Item = function (key) //Item方法,获取指定键对应的值。如果键不存在,引发异常
{
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
return me.arrValues[idx];
}
else {
if (me.ThrowException)
throw "在获取键对应的值时发生错误,键不存在。";
}
} this.Keys = function () //获取包含所有键的数组 {
return me.arrKeys;
} this.Values = function () //获取包含所有值的数组
{
return me.arrValues;
} this.Add = function (key, value) //将指定的键和值添加到字典中 {
if (CheckKey(key)) {
me.arrKeys[me.Count] = key;
me.arrValues[me.Count] = value;
me.Count++;
}
else {
if (me.ThrowException)
throw "在将键和值添加到字典时发生错误,可能是键无效或者键已经存在。";
}
} this.BatchAdd = function (keys, values) //批量增加键和值数组项,如果成功,增加所有的项,返回true;否则,不增加任何项,返回false。 {
var bSuccessed = false;
if (keys != null && keys != undefined && values != null && values != undefined) {
if (keys.length == values.length && keys.length > 0) //键和值数组的元素数目必须相同
{
var allKeys = me.arrKeys.concat(keys); //组合字典中原有的键和新键到一个新数组
if (!IsArrayElementRepeat(allKeys)) //检验新数组是否存在重复的键
{
me.arrKeys = allKeys;
me.arrValues = me.arrValues.concat(values);
me.Count = me.arrKeys.length;
bSuccessed = true;
}
}
}
return bSuccessed;
} this.Clear = function () //清除字典中的所有键和值 {
if (me.Count != 0) {
me.arrKeys.splice(0, me.Count);
me.arrValues.splice(0, me.Count);
me.Count = 0;
}
} this.ContainsKey = function (key) //确定字典中是否包含指定的键 {
return GetElementIndexInArray(me.arrKeys, key) != -1;
} this.ContainsValue = function (value) //确定字典中是否包含指定的值 {
return GetElementIndexInArray(me.arrValues, value) != -1;
} this.Remove = function (key) //从字典中移除指定键的值 {
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
me.arrKeys.splice(idx, 1);
me.arrValues.splice(idx, 1);
me.Count--;
return true;
}
else
return false;
} this.TryGetValue = function (key, defaultValue) //尝试从字典中获取指定键对应的值,如果指定键不存在,返回默认值defaultValue
{
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
return me.arrValues[idx];
}
else
return defaultValue;
} this.ToString = function () //返回字典的字符串值,排列为: 逗号分隔的键列表 分号 逗号分隔的值列表 {
if (me.Count == 0)
return "";
else
return me.arrKeys.toString() + ";" + me.arrValues.toString();
} function CheckKey(key) //检查key是否合格,是否与已有的键重复
{
if (key == null || key == undefined || key == "" || key == NaN)
return false;
return !me.ContainsKey(key);
} function GetElementIndexInArray(arr, e) //得到指定元素在数组中的索引,如果元素存在于数组中,返回所处的索引;否则返回-1。 {
var idx = -1; //得到的索引 var i; //用于循环的变量 if (!(arr == null || arr == undefined || typeof (arr) != "object")) {
try {
for (i = 0; i < arr.length; i++) {
var bEqual;
if (me.CompareMode == 0)
bEqual = (arr[i] === e); //二进制比较 else
bEqual = (arr[i] == e); //文本比较
if (bEqual) {
idx = i;
break;
}
}
}
catch (err) {
}
}
return idx;
} function IsArrayElementRepeat(arr) //判断一个数组中的元素是否存在重复的情况,如果存在重复的元素,返回true,否则返回false。 {
var bRepeat = false;
if (arr != null && arr != undefined && typeof (arr) == "object") {
var i;
for (i = 0; i < arr.length - 1; i++) {
var bEqual;
if (me.CompareMode == 0)
bEqual = (arr[i] === arr[i + 1]); //二进制比较 else
bEqual = (arr[i] == arr[i + 1]); //文本比较
if (bEqual) {
bRepeat = true;
break;
}
}
}
return bRepeat;
}
}

自定义JavaScript字典类jsdictionary.js的更多相关文章

  1. JavaScript 功能类 Url.js

    简书原文 这个类的主要目的是为了方便平时编码中的Url类型的数据操作 Github 全局名称 全局名称是由源码的最后一行代码确定的,默认为Url,如存在相同名称的对象会抛出异常: 可以通过 requi ...

  2. Java自定义一个字典类(Dictionary)

    标准Java库只包含Dictionary的一个变种,名为:Hashtable.(散列表) Java的散列表具有与AssocArray相同的接口(因为两者都是从Dictionary继承来的).但有一个方 ...

  3. JavaScript学习总结(十四)——JavaScript编写类的扩展方法

    在​J​a​v​a​S​c​r​i​p​t​中​可以使​用​类的p​r​o​t​o​t​y​p​e属性来​扩​展​类的属​性​和​方​法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...

  4. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

  5. Atitit.javascript 实现类的方式原理大总结

    Atitit.javascript 实现类的方式原理大总结 1. 实现类的式::构造方法方式:原型方式:构造方法+原型的混合方式 1 2. 原型方式(function mode)经典式..实现属性推荐 ...

  6. [转载]python中将普通对象作为 字典类(dict) 使用

    目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __ ...

  7. C#中的Dictionary字典类介绍

      Dictionary字典类介绍 必须包含名空间System.Collection.Generic    Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)    键必须是 ...

  8. javascript 定义类(转载)

    Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...

  9. javascript定义类和类的实现

    首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: /***定义类***/ var Class = fun ...

随机推荐

  1. 第1 章初识Python

    1.print()—输出 print()函数的基本用法如下: print(输出内容) 其中,输出内容可以是数字和字符串(使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式,此类内容将计算 ...

  2. 16.2--Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    分类: Linux服务篇,Linux架构篇   一.环境需求 本帖针对的是Linux环境,Windows或其他系统也可借鉴.具体只讲述Jenkins配置以及整个流程的实现. 1.JDK(或JRE)及J ...

  3. Python通过RabbitMQ实现RPC

    Client端代码: #!/usr/bin/env python # -*- coding:utf-8 -*- import pika import uuid import time class Fi ...

  4. JZOJ 5793. 【NOIP2008模拟】小S练跑步

    5793. [NOIP2008模拟]小S练跑步 (File IO): input:run.in output:run.out Time Limits: 2000 ms  Memory Limits:  ...

  5. 使用shell脚本添加用户

    该文演示如何使用shell脚本完成添加用户,首先进行一个判断,如果用户存在,提示该用户已经存在,否则进行添加新的用户. 示例代码如下: #!/bin/bash grep_user() { R=`gre ...

  6. GoF23种设计模式之结构型模式之桥接模式

    一.概述         将类的抽象部分与实现分部分离开来,使它们都可以独立地变化. 二.适用性 1.你不希望在抽象和实现之间有一个固定的绑定关系的时候.例如:在程序运行时实现部分应可以被选择或切换. ...

  7. 662. Maximum Width of Binary Tree

    https://leetcode.com/problems/maximum-width-of-binary-tree/description/ /** * Definition for a binar ...

  8. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)

     版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...

  9. BFS:HDU2612-Find a way(双向BFS)

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. Intellij Idea 创建JavaWeb项目

    折腾Tomcat折腾了两个晚上,第一个晚上怎么都进不了Tomcat的首页,第二个晚上进去了,但是新建的Web项目,在浏览器中运行,总是 Error on Apache Tomcat: The requ ...