JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>

JavaScript

var data = getData();

var group = getTree(data);

console.log(group);

function getTree(flat) {
    return _.reduce(flat, function (treeObj, item, prop, flatTree) {
        var children = _.map(item.children, function (childId) {
            return _.set(flatTree[childId], 'isCategory', true);
        }).concat(_.map(item.items, function(item) {
            return _.set(item, 'isCategory', false);
        }));
        
        item.children = !!children.length ? children : null;
        
        delete item.items;
        
        item.parent === null && (treeObj[prop] = item);
        
        return treeObj;
    }, {});
}

function getData() {
    return {
        "1": {
            "id": 1,
                "name": "foo",
                "parent": null,
                "root": 1,
                "children": [2, 4, 6],
                "items": [{
                "id": "1",
                "name": "item1"
            }, {
                "id": "2",
                "name": "item2"
            }, {
                "id": "3",
                "name": "item3"
            }]
        },
            "2": {
            "id": 2,
                "name": "bar",
                "parent": 1,
                "root": 1,
                "children": null,
                "items": [{
                "id": "4",
                "name": "item4"
            }]
        },
            "3": {
            "id": 3,
                "name": "bazz",
                "parent": null,
                "root": 3,
                "children": [5, 7],
                "items": [{
                "id": "5",
                "name": "item5"
            }, {
                "id": "6",
                "name": "item6"
            }]
        },
            "4": {
            "id": 4,
                "name": "zap",
                "parent": 1,
                "root": 1,
                "children": [9],
                "items": [{
                "id": "7",
                "name": "item7"
            }, {
     ...