Как преобразовать массив в дерево? - PullRequest
4 голосов
/ 08 сентября 2010

У меня есть два массива

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

Я хочу преобразовать его в

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

Как я могу это сделать?

1 Ответ

11 голосов
/ 08 сентября 2010
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
        }
    }
}*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...