title: multi level groupby ramda js
body: <p>I have been trying to use group by at multiple levels so that the object is grouped by tag, folder and report keys. I was able to groupby at single level but could not proceed further.</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>const data = [{
    "_index": "search_index",
    "_type": "search_type",
    "_id": "Co5EFxnqeo9ruq",
    "_score": 1,
    "_source": {
      "admin_tags": [],
      "type": "human",
      "folder": "Feature Samples",
      "url_t": "url_tdata",
      "users": [
        128
      ],
      "agent_id": 2,
      "url": "url_data",
      "favorited_by": [20],
      "idx": 121,
      "path": "Report Samples//Feature Samples",
      "name": "Grouping and Sorting",
      "description": ""
    }
  }];
  
  const mapIndexed = R.addIndex(R.map);
  
  const tg = mapIndexed((x, i) =&gt; ({
    "name": x._source.admin_tags[0] == undefined ? "Unclasified" : x._source.admin_tags[0],
    "idx": i,
    "folder": [{
      "name": x._source.folder,
      "idx": x._source.folder,
      "report": [{
        "agent_id": x._source.agent_id,
        "description": x._source.description,
        "favorited_by": x._source.favorited_by[0],
        "name": x._source.name,
        "idx": x._source.idx,
        "path": x._source.path,
        "type": x._source.type,
        "url": x._source.url,
        "url_t": x._source.url_t,
      }]
    }]
  }), data);
  
  const byTag = R.groupBy(data =&gt; data.name)
  const tagged = byTag(tg);
  console.log(tagged)</code></pre>
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"&gt;&lt;/script&gt;</code></pre>
  </div>
  </div>
  </p>
  
  <p>This is the output I am trying to achieve with grouping at three levels and values of user_report_id, views always set to zero.</p>
  
  <pre><code>const output = {
    "message": "",
    "payload": [{
      "name": "Unclasified",
      "idx": 0,
      "folders": [{
        "idx": "Feature Samples",
        "name": "Feature Samples",
        "reports": [{
          "agent_id": 2,
          "description": "",
          "idx": 121,
          "is_fav": 20,
          "name": "Grouping and Sorting",
          "type": "human",
          "url": "url_data",
          "url_t": "url_tdata",
          "user_report_id": 0,
          "views": 0,
          "report_id": '2sdfsd'
        }]
      }]
    }]
  }
  </code></pre>