JSFiddle - React, Tailwind, and code Playground

by Aubrey Taylor

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

JavaScript

var queryString = "roles={F3757192-8128-4839-B57E-E6FC7260A3E5}&cerp_categories[]=&cerp_categories[]={EE20FC7D-1A43-4B28-B27E-5C814CA82178}&cerp_categories[]={57F03F6E-1271-4159-B5C0-4E84563C2951}&cerp_categories[]={5EAE8377-5F8F-45B2-973A-56E6CD4897F3}&sortBy=date_descending"

var querySplit = queryString.split("&");

console.log(querySplit);

function splitParams(param) {
  return [param.split("=")[0], param.split("=")[1]]
}

function paramsToDict(memo, pair) {
  var key     = pair[0];
  var value   = pair[1] || "";
  var isArray = key.indexOf("[]") > 0;

  if(isArray) {
    key = key.replace("[]", "");
    if(_.isUndefined(memo[key])) memo[key] = [];
    memo[key].push(value);
  }else {
  	memo[key] = value;
  }
  
  return memo;
}

var memo = {};
var result = _.chain(querySplit)
	.map(splitParams)
  .reduce(paramsToDict, memo)
  .value()
  
console.log(result);

var _mem = {};
_.reduce({"foo": "bar"}, function(){console.log(arguments)}, _mem);