JSFiddle - React, Tailwind, and code Playground
by Trevor W
JavaScript
const isObject = function (o) {
return o === Object(o) && !isArray(o) && typeof o !== 'function';
};
const isArray = function (a) {
return Array.isArray(a);
};
const snakeToCamel = (s) => {
return s.replace(/([-_][a-z])/ig, ($1) => {
return $1.toUpperCase()
.replace('-', '')
.replace('_', '');
});
};
const camelToSnake = (s) => {
return s.split(/(?=[A-Z])/).join('_').toLowerCase();
};
const snakeCaseKeysToCamelCaseKeys = function (o) {
if (isObject(o)) {
const n = {};
Object.keys(o)
.forEach((k) => {
n[snakeToCamel(k)] = snakeCaseKeysToCamelCaseKeys(o[k]);
});
return n;
} else if (isArray(o)) {
return o.map((i) => {
return snakeCaseKeysToCamelCaseKeys(i);
});
}
return o;
};
const camelCaseKeysToSnakeCaseKeys = function (o) {
if (isObject(o)) {
const n = {};
Object.keys(o)
.forEach((k) => {
n[camelToSnake(k)] = camelCaseKeysToSnakeCaseKeys(o[k]);
});
return n;
} else if (isArray(o)) {
return o.map((i) => {
return camelCaseKeysToSnakeCaseKeys(i);
});
}
return o;
};
let foo = {
"nameSpace": "foobar",
"anotherName": {
"that_has_more": "stuff_inside",
"maybe_thisIs": "good",
"orMaybe": {
"weCanContinue": "this madness",
"untilAllTime": true
}
}
}
console.log(foo);
console.log(snakeCaseKeysToCamelCaseKeys(foo));
console.log(camelCaseKeysToSnakeCaseKeys(foo));