вложенные хеш-таблицы в JavaScript - PullRequest
0 голосов
/ 17 февраля 2012

Я хочу создать следующую структуру данных с помощью js:

folders словарь: folder-id(guid) : ==> pages dictionary

pages массив: page-position(int) : ==> files dictionary

files словарь: file-id(guid) : ==> file object

Я хочу каждый раз знать, сколько предметов в каждой коллекции.

Как бы вы предложили мне реализовать это в JS?

Должен ли я использовать массив или объект с динамически добавленными свойствами?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Делайте занятия следующим образом.

function HashTable() {
    var content = {};
    var count = 0;
    this.Add = function(key, value) {
        if (content.hasOwnProperty(key)) throw new Error("Key already exist");
        content[key] = value;
        count++;
    };
    this.Set = function(key, value) {
        if (!content.hasOwnProperty(key)) count++;
          content[key] = value;
    };
    this.Get = function(key) {
        if (!content.hasOwnProperty(key)) throw new Error("No such key");
        return content[key];
    };
    this.AllKeys = function() {
        var keys = [];
        for (a in content) {
            keys.push(a);
        }
        return keys;
    };
    this.Count = function() {
        return count;
    };
    this.Remove = function(key) {
        if (!content.hasOwnProperty(key)) throw new Error("No such key");
        delete content[key];
        count--;
    };
}


// Then you can use it as follows

var folders = new HashTable();
folders.Add(1, 10);
alert(folders.Count());
alert(folders.Get(1));
folders.Remove(1);
alert(folders.Count());

Это дает вам более жесткий и ООП подход.

Редактировать

Это гарантирует, чтоваши ключи уникальны, подсчитывают в любое время и принимают в качестве ключей целые числа и строки.

2 голосов
/ 18 февраля 2012

Вы можете просто написать это:

var folders = {
    'folder1-guid': [
        {'file1-guid': 'file1-content'},
        {'file2-guid': 'file1-content'}
    ]
};

Либо создайте Object и Array экземпляров и присвойте им свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...