当前位置: 代码迷 >> Web前端 >> 基于Array兑现并扩展MAP功能
  详细解决方案

基于Array兑现并扩展MAP功能

热度:184   发布时间:2013-08-16 14:29:57.0
基于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();

? ? }

}

  相关解决方案