2010-09-07 11 views
4

J'ai deux tableauxComment convertir un tableau en arbre?

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

Je veux le convertir en

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

Comment puis-je faire cela?

+0

utilitaire JSON de YUI pourrait être utile, je n'ai pas mis cela comme une réponse bien, parce que je ne pouvais pas dire vous êtes au départ si cela répond à vos besoins. Ou, pensez-y, consultez l'utilitaire d'extension de YUI, il fusionne les objets que je crois. – danjah

+1

Êtes-vous en train de concevoir un Trie? –

Répondre

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": {} 
     } 
    } 
}*/ 

La seule chose qu'il ne fait pas est de définir les feuilles de l'arbre à null - il les définit à un objet vide. Est-ce correct?

Si vous voulez que les feuilles soient null, utilisez ce qui suit à la place:

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

Ne pas oublier d'utiliser 'var':' var i = 0, longueur = array.length' –

+0

@Marcel Korpel: Merci, corrigé. –