reorx
3/9/2013 - 10:38 AM

tree.js

/*jslint plusplus: true */
/*global console */
/*
 * Output:
 *
 * a
 *   /- a1
 *     /- a11
 *       /- a111
 *       /- a112
 *   /- a2
 *
 */

(function () {
    "use strict";

    var data = {
            'a': ['a1', 'a2'],
            'a1': ['a11'],
            'a2': [],
            'a11': ['a111', 'a112']
        },
        parentMap = {},
        root,
        i;

    for (i in data) {
        if (data.hasOwnProperty(i)) {
            var l = data[i],
                j;
            for (j = 0; j < l.length; j++) {
                parentMap[l[j]] = i;
            }
        }
    }

    //console.log('parentMap', parentMap);

    for (i in data) {
        if (data.hasOwnProperty(i)) {
            if (!parentMap.hasOwnProperty(i)) {
                root = i;
                break;
            }
        }
    }

    function printStruct(elem, level) {
        console.log(new Array(level + 1).join('  ') + (level === 0 ? '' : '/- ') + elem);
        if (data.hasOwnProperty(elem)) {
            data[elem].forEach(function (child) {
                printStruct(child, level + 1);
            });
        }
    }
    printStruct(root, 0);

}());