javascript中的字典

1.概念數組

    字典是一種以鍵值對的形式存儲的數據結構,就係那個電話本中的名字和電話號碼同樣。要找到一個電話首先要找到名字,再根據名字找到電話號碼。這裏的鍵就是指用來查找的東西,值就是查找獲得的結果。瀏覽器

    Javascript中的object類就是已字典的形式設計的。這裏使用object類自己的特性,實現一個dictionary類,讓字典類型的對戲那個使用起來更加簡單。數據結構

    dictionary類的基礎是array類,不是object類。稍後將會提到,咱們想對字典中的鍵排序,而Javascript中是不能對對象的屬性經行排序。Javascript中一切皆是對象,數組也是對象。函數

    先使用下面的方法來定義dictionary類:測試

function Dictionary(){
    this.datastore = new Object();
}

    先來定義一個add方法,該方法接受兩個參數,鍵和值。鍵是值在字典下的索引,以下:this

function add(key, value){
    this.datastore[key] = value;
}

    接下來定義find方法,該方法以鍵做爲參數,返回和其關聯的值,代碼以下:spa

function find(key){
    return this.datastore[key];
}

    從字典中刪除鍵值對須要使用Javascript中的一個內置函數,delete,這個函數是object類的一部分,使用對鍵的引用做爲參數,該函數同時刪掉和其關聯的值。代碼以下:設計

function remove(key){
    delete this.datastore[key];
}

    最後咱們但願能夠顯示字典中全部的鍵值對,下面是一個完成該任務的方法:code

function showAll(){
    for (var key in this.datastore) {
        document.write(key + '->' + this.datastore[key]);
        document.write('<br>');
    }
}

    咱們還能夠定義一些在特定狀況下有用的輔助方法。好比,要是知道字典中元素的個數就行了,那麼能夠頂一個count方法,以下:對象

function count(){
    var n = 0;
    for (var key in this.datastore) {
        ++n;
    }
    return n;
}

   不少看官和我同樣會想,能不能用length屬性,這是不行的,由於當鍵的類型爲字符串的時候,length屬性就無論用了,可使用下面的代碼來測試:

var nums = new Array();
nums[0] = 1;
nums[1] = 2;
console.info(nums.length); // 顯示2
var pbook = new Array();
pbook["David"] = 1;
pbook["Jennifer"] = 2;
console.info(pbook.length); // 顯示0

    clear是另一種輔助方法,定義以下:

function clear(){
    for (var key in this.datastore) {
        delete this.datastore[key];
    }
}

    字典的主要用途是經過鍵取值,咱們無需關係數據在字典中的實際存儲順序。而後不少人但願看到一個有序的字典。個人作法是先把鍵值對的全部鍵值取出來,放在一個數組中,而後對這個數組排序,最後按照排序後的順序輸出值,以下:

function sort(){
    var keys = Array();
    for (var key in this.datastore) {
        keys.push( key );
    }
    keys.sort();
    for (var i=0; i<keys.length; i++) {
        document.write(keys[i] + '->' + this.datastore[keys[i]]);
        document.write('<br>');
    }
}

 

2.代碼實現

  下面看看上面全部的問題代碼:

function Dictionary(){
    this.add = add;
    this.datastore = new Object();
    this.find = find;
    this.remove = remove;
    this.showAll = showAll;
    this.length = length;
    this.count = count;
    this.clear = clear;
    this.sort = sort;
}

function add(key, value){
    this.datastore[key] = value;
}

function find(key){
    return this.datastore[key];
}

function remove(key){
    delete this.datastore[key];
}

function count(){
    var n = 0;
    for (var key in this.datastore) {
        ++n;
    }
    return n;
}

function showAll(){
    for (var key in this.datastore) {
        document.write(key + '->' + this.datastore[key]);
        document.write('<br>');
    }
}

function sort(){
    var keys = Array();
    for (var key in this.datastore) {
        keys.push( key );
    }
    keys.sort();
    for (var i=0; i<keys.length; i++) {
        document.write(keys[i] + '->' + this.datastore[keys[i]]);
        document.write('<br>');
    }
}

function clear(){
    for (var key in this.datastore) {
        delete this.datastore[key];
    }
}

var pbook = new Dictionary();
pbook.add("Raymond","123");
pbook.add("David", "345");
pbook.add("Cynthia", "456");

pbook.showAll();
document.write('after sort:' + '<br>')
pbook.sort();

document.write("Number of entries: " + pbook.count() + '<br>');
document.write("David's extension: " + pbook.find("David") + '<br>');
pbook.showAll();
pbook.clear();
document.write("Number of entries: " + pbook.count() + '<br>');

上面代碼在瀏覽器下的輸出結果以下:

相關文章
相關標籤/搜索