Skip to content

Instantly share code, notes, and snippets.

@fczbkk
Created January 24, 2020 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fczbkk/52a306640954f12d30ec115760bfa88e to your computer and use it in GitHub Desktop.
Save fczbkk/52a306640954f12d30ec115760bfa88e to your computer and use it in GitHub Desktop.
Function to serialize object into a string (e.g. URL parameters).
/**
* @typedef {Object} SerializeOptions
* @param {String} [pairDelimiter = '='] Delimiter to be used between each key and value.
* @param {String} [itemDelimiter = '&'] Delimiter to be used between each pair.
*/
/**
* Converts data object to a string, using delimiters. Primarily used to generate URL parameters.
* @param {Object} [data = {}]
* @param {SerializeOptions} [options]
* @returns {string}
*
* @example
* // returns "aaa=bbb&ccc=ddd"
* serialize({aaa: 'bbb', ccc: 'ddd'})
*
* @example
* // If value is `null` or `undefined`, the pairDelimiter is not used.
* // returns "aaa&bbb"
* serialize({aaa: null, bbb: undefined})
*
* @example
* // Custom delimiters can be used.
* // returns "aaa:bbb+ccc:ddd"
* serialize({aaa: 'bbb', ccc: 'ddd'}, {pairDelimiter: ':', itemDelimiter: '+'})
*/
export function serialize (
data = {},
{
pairDelimiter = '=',
itemDelimiter = '&'
} = {}
) {
return Object.entries(data)
.map((pair) => pair.filter(val => val != null).join(pairDelimiter))
.join(itemDelimiter)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment