JSFiddle - React, Tailwind, and code Playground

by bman654

JavaScript

var o = {
  aaa: {
    name: "Aaa",
    desc: "..."
  },
  bbb: {
    name: "Bbb",
    desc: "..."
  },
  ccc: {
    name: "Ccc",
    desc: "...",
    stuffing: {
      foo: {
        bar: "bar"
      },
      keys: ["foo"]
    }
  },
  keys: ["aaa", "bbb", "ccc"]
}

function flatten(obj) {
    if (!obj) { return obj; }

    if (_.has(obj, "keys")) {
        return _.map(keys, function (key) {
           if (!_.has(obj, key)) { return { key: key }; }
           return _.extend({}, flatten(obj[key]), { key: key });
        });
    }
    else {
        // create a new object, flattening each property
        var result = {};
        _.each(obj, function (value, key) {
            result[key] = flatten(value);
        });
        return result;
    }
}

console.dir(flatten(o));