如何将数组转换为树形结构?

4

我有两个数组

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

我想将它转换为
{
    a :
    {
        b :
        {
            c : null,
            d : null
        }
    }
}

我该怎么做?

YUI的JSON实用工具可能会有所帮助,虽然我没有直接回答您是否能满足您的需求。或者,您可以考虑使用YUI的augment工具,它可以合并对象。 - danjah
1个回答

12
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,而是将它们设置为空对象。这样可以吗?

如果您想要叶子节点是 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
        }
    }
}*/

1
不要忘记使用 varvar i = 0, length = array.length - Marcel Korpel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接