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();
}
}