【问题标题】:How to convert array to tree?如何将数组转换为树?
【发布时间】:2010-09-07 22:03:18
【问题描述】:

我有两个数组

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

我想把它转换成

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

我该怎么做?

【问题讨论】:

  • YUI 的 JSON 实用程序可能会有所帮助,但我没有将其作为答案,因为我无法直接告诉您它是否能满足您的需求。或者,想想看,看看 YUI 的增强实用程序,我相信它会合并对象。

标签: javascript arrays tree


【解决方案1】:
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": {}
        }
    }
}*/

它唯一不做的是将树的叶子设置为空——它将它们设置为一个空对象。可以吗?

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

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
        }
    }
}*/

【讨论】:

  • 别忘了使用var:var i = 0, length = array.length
  • @Marcel Korpel:谢谢,已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2019-10-29
  • 1970-01-01
  • 2011-05-18
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多