You can use a recursive approach to convert all keys of a multi-level object to snake_case. Here’s a JavaScript function that does that:
JavaScript
function convertKeysToSnakeCase(obj) {
if (obj && typeof obj === 'object') {
if (Array.isArray(obj)) {
return obj.map(item => convertKeysToSnakeCase(item));
} else {
const snakeCaseObj = {};
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
let snakeCaseKey = key
.replace(/([a-z])([A-Z])/g, '$1_$2') // Insert underscore between lowercase and uppercase letters
.toLowerCase();
if (/^[A-Z]/.test(key)) {
// If the word starts with a capital letter, remove the leading underscore
snakeCaseKey = snakeCaseKey.substring(1);
}
snakeCaseObj[snakeCaseKey] = convertKeysToSnakeCase(obj[key]);
}
}
return snakeCaseObj;
}
} else {
return obj;
}
}
// Example usage:
const inputObject = {
firstName: 'John',
lastName: 'Doe',
addressInfo: {
streetAddress: '123 Main St',
cityInfo: {
cityName: 'Cityville',
postalCode: '12345'
}
},
phoneNumbers: ['123-456-7890', '987-654-3210'],
camelCaseKey: 'HelloWorld',
mixedCaseKey: 'someMixedCaseValue'
};
const snakeCaseObject = convertKeysToSnakeCase(inputObject);
console.log(snakeCaseObject);
This function convertKeysToSnakeCase
takes an object as input and recursively converts all keys to snake_case.