如何将数组转换为树?

时间:2010-09-07 22:03:18

标签: javascript arrays tree

我有两个数组

["a", "b", "c"]
["a", "b", "d"]

我想将其转换为

{
    a :
    {
        b :
        {
            c : null,
            d : null
        }
    }
}

我该怎么做?

1 个答案:

答案 0 :(得分:11)

var tree = {}

function addToTree(tree, array) { 
   for (var i = 0, length = array.length; i < length; i++) {
       tree = tree[array[i]] = tree[array[i]] || {}
   }
}

addToTree(tree, ["a", "b", "c"])
addToTree(tree, ["a", "b", "d"])

/*{
    "a": {
        "b": {
            "c": {},
            "d": {}
        }
    }
}*/

它唯一没做的就是将树的叶子设置为null - 它将它们设置为空对象。那可以吗?

如果您希望叶子为空,请改用以下内容:

function addToTree(tree, array) { 
    for (var i = 0, length = array.length; i < length; i++) {
        tree = tree[array[i]] = ((i == length - 1) ? null : tree[array[i]] || {})
    }
}

// or, without the i == length - 1 check in each iteration:
function addToTree(tree, array) { 
    for (var i = 0, length = array.length; i < length -1; i++) {
        tree = tree[array[i]] = tree[array[i]] || {};
    } 
    tree[array[i]] = null;
}

/*{
    "a": {
        "b": {
            "c": null,
            "d": null
        }
    }
}*/