Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中使用2个一维数组创建层次结构树?_Javascript_Arrays_Recursion - Fatal编程技术网

如何在javascript中使用2个一维数组创建层次结构树?

如何在javascript中使用2个一维数组创建层次结构树?,javascript,arrays,recursion,Javascript,Arrays,Recursion,我尝试使用两个数组创建一个树-第一个数组包含需要转换为层次/树/嵌套数组的整数,第二个数组包含触发分支的数字 作为一项基本测试,我成功地将第一个数组分为多个分支,但我认为在正确嵌套数组所需的递归函数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 ]

我尝试使用两个数组创建一个树-第一个数组包含需要转换为层次/树/嵌套数组的整数,第二个数组包含触发分支的数字

作为一项基本测试,我成功地将第一个数组分为多个分支,但我认为在正确嵌套数组所需的递归函数
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=function(seq,breaks){
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]]
var-res=[],n; 对于(变量i=0;i
算法如何知道其中一个中断应该在父级上而不是在正在构建的当前分支上启动新分支?i、 e.它如何知道结果不应该是:
[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]
[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]]