构建数据库字符串

时间:2011-04-04 23:14:32

标签: javascript jquery database formatting

我正在尝试根据网站上的某些任意数据构建数据库。这是复杂的,每个网站都有变化,所以我会省去细节。这基本上就是我要做的事情

function level0(arg) { textarea.innerHTML += arg + ' = {'; }
function level1(arg) { textarea.innerHTML += '\n\t' + arg + ': ['; }
function level2(arg) { textarea.innerHTML += arg + ', '; }

等等。事情是某些level1没有任何孩子,我无法正确格式化。

我的三个问题如下。

  1. 结尾逗号将在IE中破解(谢谢MS)
  2. 如果没有任何孩子,则不应打印空级别
  3. 结束/卷曲?括号/
  4. HERE'S A DEMO 到目前为止我所拥有的。注意结束逗号,不应打印的空sub2,没有右括号或大括号

    我需要重新设计整个事物吗? 还有一种方法可以将这一切都集中在一个功能中,所以如果我添加另一个图层,我不必担心吗?

    修改

    这需要以字符串格式完成,我无法构建一个对象然后对其进行字符串化,主要是因为我需要知道我正在添加哪个元素。

2 个答案:

答案 0 :(得分:1)

总的来说,看起来你仍然可能想要构建一个对象,但是如果你坚持不构建它 - 这里有一些示例解决方案:

function Printer() {
    var result = '',
        lastLevel = null,
        close = {0:'\n}', 1:']', 2:''},
        delimiter = {0: ',\n', 1:',\n', 2:','};

    function closeLevel(level, noDelimiter) {
        if(lastLevel === null)
            return;
        var l = lastLevel, d = level == lastLevel;        
        while(l >= level) {
            result += close[l] + (l == level && !noDelimiter ? delimiter[l]:'');
            l--;
        }
    }

    this.level0 = function(arg) {
        closeLevel(0);
        result += arg + ' = {\n';
        lastLevel = 0;
    };

    this.level1 = function(arg) {
        closeLevel(1);
        result += '\t' + arg + ': [';
        lastLevel = 1;
    };

    this.level2 = function(arg) {
        closeLevel(2);
        result += arg;
        lastLevel = 2;
    };

    this.getResult = function() {
        closeLevel(lastLevel, true);
        return result;
    }
}



var p = new Printer();
p.level0('head');

p.level1('sub1');
p.level2('item1');p.level2('item2');p.level2('item3');
p.level1('sub2');
p.level1('sub3');
p.level2('newthing');
p.level0('head2');

document.getElementById('textarea').value = p.getResult();

您可以在行动here中看到它。

答案 1 :(得分:0)

我不确定为什么要使用字符串连接构建具有嵌套数组的对象。这样的事情会简单得多,因为它不需要修复尾随逗号等等:

编辑:我已更新代码,以便跟踪放入的最后一个级别。

function Db() {
    var level0, level1;
    var data = new Object();

    this.level0 = function(arg) {
        level0 = new Object();
        data[arg] = level0;

    }
    this.level1 = function(arg) {
        level1 = new Array();
        level0[arg] = level1;
    }
    this.level2 = function(arg) {
        level1.push(arg);
    }

    this.toString = function() {
        var s = '';
        for(i in data) {
            s += i + '\n';
            for(j in data[i]) {
                if(data[i][j].length>0) {
                    s += '\t' + j + ': [' + data[i][j] + ']\n' ;
                }
            }
        }
        return s;
    }

}

像这样使用:

var db = new Db();
db.level0('head');
db.level1('sub1');
db.level2('item1');db.level2('item2');db.level2('item3');

我已经在您链接的演示中对此进行了测试,它的工作正常。