4


3

配列をツリーに変換する方法は?

私は2つの配列を持っています

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

に変換したい

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

どうやってやるの?

1 Answer


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に設定することだけです。空の葉に設定します。 それは大丈夫ですか?

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