基于Array实现并扩展MAP功能
/*
?* MAP对象,基于Array实现并扩展MAP功能
?*
?* 方法说明:
?* size() ? ? ?获取map元素个数
?* isEmpty() ? 判断map是否为空
?* clear() ? ? 删除map所有元素
?* push(key, value) ? 向map中增加元素(key, value),顺序的
?* remove(key) ? ?删除指定key的元素,成功返回True,失败返回False
?* get(key) ? ?获取指定key的元素值value,失败返回NULL
?* element(index) ? 获取指定索引的元素(使用element.key,element.value获取key和value),失败返回NULL
?* containsKey(key) ?判断map中是否含有指定key的元素
?* containsKeyIgnoreCase(key) ?判断map中是否含有指定key的元素(忽略大小写)
?* containsValue(value) 判断map中是否含有指定value的元素
?* values() ? ?获取map中所有value的数
?* uniqueValues() 获取map中所有VALUE的数组,唯一的value
?* keys() ? ? 获取map中所有key的数
?* sort() ? ? map排序,按照push的顺序
?* inverse() ?map排序,按照push的顺序倒序
?* randomKey() ?随机一个key
?* randomValue() ?随机一个value
?* randomEntry() ? 随机一个key-value
?*?
?* 使用例子:
?* var map = new Map();
?* map.push("key", "value");
?* var val = map.get("key");
?* map.containsValue("val");
?* map.inverse();
?* readme: 建议使用字符串作为key
?*/
function Map() {
?
//实例化一个数组
? ? this.elements = new Array();
?
? ? //获取MAP元素个数
? ? this.size = function () {
? ? ? ? return this.elements.length;
? ? }
?
? ? //判断MAP是否为空
? ? this.isEmpty = function () {
? ? ? ? return (this.elements.length < 1);
? ? }
?
? ? //删除MAP所有元素
? ? this.clear = function () {
? ? ? ? this.elements = new Array();
? ? }
?
? ? //向MAP中增加元素(key, value)
? ? this.push = function (_key, _value) {
? ? ? ? //判断是否存在key
? ? ? ? if (this.containsKey(_key)) {
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? this.elements.push({
? ? ? ? ? ? key: _key,
? ? ? ? ? ? value: _value
? ? ? ? });
? ? }
?
? ? //向MAP中从右边删除元素
? ? this.pop = function () {
? ? ? ? return this.elements.pop();
? ? }
?
? ? //向MAP中从左边删除元素
? ? this.shift = function () {
? ? ? ? return this.elements.shift();
? ? }
?
? ? //删除指定KEY的元素,成功返回True,失败返回False
? ? this.remove = function (_key) {
? ? ? ? var bln = false;
? ? ? ? //判断是否存在key
? ? ? ? if (!this.containsKey(_key)) {
? ? ? ? ? ? return bln;
? ? ? ? }
? ? ? ? try {
? ? ? ? ? ? //遍历数组
? ? ? ? ? ? for (i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? ? ? if (this.elements[i].key == _key) {
? ? ? ? ? ? ? ? ? ? //从数组中移除
? ? ? ? ? ? ? ? ? ? this.elements.splice(i, 1);
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (e) {
? ? ? ? ? ? console.log(e);
? ? ? ? }
? ? ? ? return bln;
? ? }
?
? ? //获取指定KEY的元素值VALUE,失败返回NULL
? ? this.get = function (_key) {
? ? ? ? var result = null;
? ? ? ? try {
? ? ? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? ? ? if (this.elements[i].key == _key) {
? ? ? ? ? ? ? ? ? ? return this.elements[i].value;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (e) {
? ? ? ? ? ? console.log(e);
? ? ? ? }
? ? ? ? return result;
? ? }
?
?
? ? //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
? ? this.element = function (_index) {
? ? ? ? //判断下标是否存在
? ? ? ? if (isNaN(_index) || _index < 0 || _index >= this.elements.length) {
? ? ? ? ? ? return null;
? ? ? ? }
? ? ? ? try {
? ? ? ? ? ? return this.elements[_index];
? ? ? ? } catch (e) {
? ? ? ? ? ? console.log(e);
? ? ? ? }
? ? ? ? return null;
? ? }
?
? ? //判断MAP中是否含有指定KEY的元素
? ? this.containsKey = function (_key) {
? ? ? ? var bln = false;
? ? ? ? try {
? ? ? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? ? ? if (this.elements[i].key == _key) {
? ? ? ? ? ? ? ? ? ? bln = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (e) {
? ? ? ? ? ? console.log(e);
? ? ? ? }
? ? ? ? return bln;
? ? }
?
? ? //判断MAP中是否含有指定KEY的元素(忽略大小写)
? ? this.containsKeyIgnoreCase = function (_key) {
? ? ? ? var bln = false;
? ? ? ? try {
? ? ? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? ? ? if ((this.elements[i].key+"").toLowerCase() == (_key+"").toLowerCase()) {
? ? ? ? ? ? ? ? ? ? bln = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (e) {
? ? ? ? ? ? console.log(e);
? ? ? ? }
? ? ? ? return bln;
? ? }
?
?
? ? //判断MAP中是否含有指定VALUE的元素
? ? this.containsValue = function (_value) {
? ? ? ? var bln = false;
? ? ? ? try {
? ? ? ? ? ? for (i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? ? ? if (this.elements[i].value == _value) {
? ? ? ? ? ? ? ? ? ? bln = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (e) {
? ? ? ? ? ? console.log(e);
? ? ? ? }
? ? ? ? return bln;
? ? }
?
? ? //获取MAP中所有VALUE的数组(ARRAY)
? ? this.values = function () {
? ? ? ? var arr = new Array();
? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? arr.push(this.elements[i].value);
? ? ? ? }
? ? ? ? return arr;
? ? }
?
? ? //获取MAP中所有VALUE的数组(唯一的 ARRAY)
? ? this.uniqueValues = function () {
? ? ? ? var arr = new Array();
? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? var v = this.elements[i].value;
? ? ? ? ? ? //判断数组中是否存在
? ? ? ? ? ? if (arr.indexOf(v) < 0) {
? ? ? ? ? ? ? ? arr.push(v);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return arr;
? ? }
?
? ? //获取MAP中所有KEY的数组(ARRAY)
? ? this.keys = function () {
? ? ? ? var arr = new Array();
? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? arr.push(this.elements[i].key);
? ? ? ? }
? ? ? ? return arr;
? ? }
?
? ? //获取MAP中所有KEY-VALUE 的数组(ARRAY)
? ? this.toString = function () {
? ? ? ? var arr = new Array();
? ? ? ? for (var i = 0; i < this.elements.length; i++) {
? ? ? ? ? ? arr.push(this.elements[i].key+":"+this.elements[i].value);
? ? ? ? }
? ? ? ? return arr;
? ? }
?
? ? //生成随机数
? ? this.randomNum = function (size) {
? ? ? ? var size = this.elements.length;
? ? ? ? var num = parseInt(Math.random() * size);
? ? ? ? return num;
? ? }
?
? ? //随机一个key
? ? this.randomKey = function () {
? ? ? ? var randomNum = this.randomNum;
? ? ? ? return this.elements[randomNum].key;
? ? }
?
? ? //随机一个value
? ? this.randomValue = function () {
? ? ? ? var randomNum = this.randomNum;
? ? ? ? return this.elements[randomNum].value;
? ? }
?
? ? //随机一个元素(map)
? ? this.randomEntry = function () {
? ? ? ? var randomNum = this.randomNum;
? ? ? ? return this.elements[randomNum];
? ? }
?
? ? //map反转,按照push的顺序反转
? ? this.inverse = function(){
? ? ? ? this.elements.reverse();
? ? }
?
//map排序,按照push的顺序
? ? this.sort = function(){
? ? ? ? this.elements.sort();
? ? }
}