JSFiddle - React, Tailwind, and code Playground

by Evan Sharp

JavaScript

flattenObject = ob =>
  Object.keys(ob).reduce((toReturn, k) => {
    if (Object.prototype.toString.call(ob[k]) === '[object Date]') {
      toReturn[k] = ob[k].toJSON();
    } else if (ob[k] && typeof ob[k] === 'object') {
      const flatObject = flattenObject(ob[k]);
      const isArray = Array.isArray(ob[k]);
      Object.keys(flatObject).forEach(k2 => {
        toReturn[
          `${k}${isArray ? k2.replace(/^(\d+)(\..*)?/, '[$1]$2') : `.${k2}`}`
        ] =
          flatObject[k2].toString();
      });
    } else {
      toReturn[k] = ob[k].toString();
    }

    return toReturn;
  }, {});


thing = (spaceId, params = {}, formAttributes = {}) => {
  const mergedOptions = Object.assign(
    {
      method: 'post',
      action: `/ms/api/availity/internal/spaces/magneto/sso/v1/saml/${spaceId}`,
      target: '_blank',
    },
    formAttributes
  );
  const form = document.createElement('form');
  Object.keys(mergedOptions).forEach(key => {
    form.setAttribute(key, mergedOptions[key]);
  });
  const flat = flattenObject(params);
  const fields = Object.keys(flat)
    .map(key => {
      const name = key.replace(/\[\d+\]/g, '[]');
      const value = flat[key];
      return `<input type="hidden" name="${name}" value="${value}" />`;
    })
    .join('');

  return fields
};


const complexObject = {a: {b: 'c', d: 1, e: ['f', 'g', 2, 3, {h: {i: 'j', k: [4, 'l']}}]}};

console.log(thing('idk', complexObject));