Deep camelize keys

by Bart Kalisz

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

JavaScript

console.clear();

const deepCamelizeKeys = obj => {
	const isArray = _.isArray(obj);
	let output = isArray ? [] : {};

	Object.entries(obj).forEach(([key, val]) => {
		const isValueObject = typeof val === "object" && !!Object.keys(val).length;
		const value = isValueObject ? deepCamelizeKeys(val) : val;

		if (isArray) {  
    	output.push(value);
    } else {
	    Object.assign(output, { [_.camelCase(key)]: value });
    }
  });

  return output;
}

const json = {
	alfa_romeo: 1,
  ford_focus: [1, 2, { john_talabot: 3 }],
  andy_hughes: {
  	meryl_streep: false,
    volks_wagen: [
    	{	golf_v: true, passat: false },
      'hey',
      'dude',
    ],
  },
};

let time = Date.now();
const camelJson = deepCamelizeKeys(json);
time = Date.now() - time;

console.log(camelJson);
console.log(`mapped in ${time}ms`);