簡體   English   中英

如何使用JavaScript中的2個一維數組創建層次結構樹?

[英]How do I create a hierarchy tree using 2 one-dimensional arrays in javascript?

我正在嘗試使用兩個數組創建樹-第一個數組包含需要轉換為層次結構/樹/嵌套數組的整數,第二個數組包含觸發分支的數字。

我已經成功地將第一個數組切成分支作為基本測試,但是我認為遞歸函數makeBranch缺少正確嵌套數組所需的內容。

這有效:

var sequence = [0, 2, 1, 3, 4, 9, 7, 14, 13, 15, 23, 21, 22, 17, 20, 19, 17, 23, 24, 16, 11, 6, 10, 5],
breaks = [ 0, 17, 23 ];

var tree = [];
for (var i = 0, imax = sequence.length; i<imax; ++i) {
    var val = sequence[i];
    if (breaks.lastIndexOf(val) != -1) {
        tree.push([]);
    }
    tree[tree.length-1].push(val);
}
console.log(tree); // **** First test - passes

使用相同的數組,會產生非常奇怪的結果:

var tree = makeBranch(sequence, 0, breaks);
console.log(tree);  // **** Second test - fails

function makeBranch(sequence, i, breaks) {

    var branch = [];
    for (var imax = sequence.length; i<imax; ++i) {
        var val = sequence[i];
        if (breaks.lastIndexOf(val) != -1) {
            branch.push( makeBranch(sequence.slice(i+1), i+1, breaks) );
        } 
        branch.push(val);
    }

    return branch;

}

基本上,我想打開這個數組:

[0, 2, 1, 3, 4, 9, 7, 14, 13, 15, 23, 21, 22, 17, 20, 19, 17, 23, 24, 16, 11, 6, 10, 5]

(或類似的東西):

[0, 2, 1, 3, 4, 9, 7, 14, 13, 15, [23, 21, 22, [17, 20, 19], [17]], [23, 24, 16, 11, 6, 10, 5]]

任何幫助,將不勝感激。

var tree = function (seq, breaks) { 
    var res = [], n;
    for(var i = 0; i < seq.length; ) {
        if(breaks.indexOf(seq[i]) != -1) {
            for(var j = i+1; j < seq.length; j++) {
                if(breaks.indexOf(seq[j]) != -1) {
                    break;
                }
            }
            n = j;
            var branch = tree(seq.slice(i+1, n), breaks);
            branch.unshift(seq[i]);
            res.push(branch);
            i+=branch.length;
        } else {
            res.push(seq[i]);
            i++;
        }
    }
    return res;
}

tree([0, 2, 1, 3, 4, 9, 7, 14, 13, 15, 23, 21, 22, 17, 20, 19, 17, 23, 24, 16, 11, 6, 10, 5], [0,17,23])

[[0, 2, 1, 3, 4, 9, 7, 14, 13, 15], [23, 21, 22], [17, 20, 19], [17], [23, 24, 16, 11, 6, 10, 5]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM