diff --git a/snippets/objectToQueryString.md b/snippets/objectToQueryString.md new file mode 100644 index 000000000..7d6f2f67c --- /dev/null +++ b/snippets/objectToQueryString.md @@ -0,0 +1,26 @@ +--- +title: objectToQueryString +tags: utility,object,function,intermediate +--- + +Returns a query string generated from the key-value pairs of the given object. + +Use `Array.prototype.reduce()` on `Object.entries(queryParameters)` to create the query string. +Determine the `symbol` to be either `?` or `&` based on the `index` and concatenate `val` to `queryString` only if it's a string. +Return the `queryString` or an empty string when the `queryParameters` are falsy. + +```js +const objectToQueryString = (queryParameters) => { + return queryParameters + ? Object.entries(queryParameters).reduce((queryString, [key, val], index) => { + const symbol = index === 0 ? '?' : '&'; + queryString += (typeof val === "string") ? `${symbol}${key}=${val}` : ''; + return queryString; + }, '') + : ''; +}; +``` + +```js +objectToQueryString({page: '1', size: "2kg", key: undefined}); // '?page=1&size=2kg' +``` diff --git a/test/objectToQueryString.test.js b/test/objectToQueryString.test.js new file mode 100644 index 000000000..8c9a10bcf --- /dev/null +++ b/test/objectToQueryString.test.js @@ -0,0 +1,29 @@ +const {objectToQueryString} = require('./_30s.js'); + +test('objectToQueryString is a Function', () => { + expect(objectToQueryString).toBeInstanceOf(Function); +}); + +test("{page: '1', size: '2kg', key: '21'} to give '?page=1&size=2kg&key=21'", () => { + expect( + objectToQueryString({page: '1', size: '2kg', key: '21'}) + ).toEqual('?page=1&size=2kg&key=21'); +}); + +test("{page: '1', size: '2kg', key: undefined} to give '?page=1&size=2kg'", () => { + expect( + objectToQueryString({page: '1', size: '2kg', key: undefined}) + ).toEqual('?page=1&size=2kg'); +}); + +test("{} to give ''", () => { + expect( + objectToQueryString({}) + ).toEqual(''); +}); + +test("{page: 1, size: null, key: undefined} to give ''", () => { + expect( + objectToQueryString({page: 1, size: null, key: undefined}) + ).toEqual(''); +});