Skip to content

Instantly share code, notes, and snippets.

@emcmanus
Forked from felixjung/snakeToCamelCase.js
Last active May 17, 2022 02:29
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save emcmanus/eb735299788c820b4eb85c38f02598e4 to your computer and use it in GitHub Desktop.
Save emcmanus/eb735299788c820b4eb85c38f02598e4 to your computer and use it in GitHub Desktop.
ES6 module to recursively convert snake case keys in an object to camel case using lodash.
'use strict';
/**
* @example
* import keysToCamelCase from './snakeToCamelCase';
* keysToCamelCase({bad_key: 1}); => {badKey: 1}
* keysToCamelCase([{bad_key: 1}]); => [{badKey: 1}]
*/
function keysToCamelCase(object) {
let camelCaseObject = _.cloneDeep(object);
if (_.isArray(camelCaseObject)) {
return _.map(camelCaseObject, keysToCamelCase);
} else {
camelCaseObject = _.mapKeys(camelCaseObject, (value, key) => {
return _.camelCase(key);
});
// Recursively apply throughout object
return _.mapValues(camelCaseObject, (value) => {
if (_.isPlainObject(value)) {
return keysToCamelCase(value);
} else if (_.isArray(value)) {
return _.map(value, keysToCamelCase);
} else {
return value;
}
});
}
}
export default keysToCamelCase;
@emcmanus
Copy link
Author

Latest version handles case where top-level object is an array

Previously [{a:1}] would become {0: {a:1}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment