[英]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.