こんな感じで出来るはず。
camelConverter.js
class CamelConverter {
static convert(obj) {
return Object.keys(obj).reduce((acc, key) => {
// 値がobjectの場合は再帰的にconvertを実行
if(Object.prototype.toString.call(obj[key]) === '[object Object]') {
acc[this.toCamel(key)] = this.convert(obj[key]);
return acc
}
acc[this.toCamel(key)] = obj[key];
return acc
}, {});
};
// snake_caseの単語をlowerCamelに変換する
static toCamel(str) {
return str.replace(/_(\w)/g, (_match, capture) => {
return capture.toUpperCase()
});
};
}
export default CamelConverter
テストはこちら(Jest)
camelConverter.test.js
import CamelConverter from './camelConverter'
describe('CamelConverter', () => {
describe('#convert', () => {
test('Key名をキャメルケースに変換する', () => {
const snakeCase = {
id: 1,
property_string: 'string',
property_int: 1,
property_boolean: false,
property_object: {
inner_property_string: 'string',
inner_property_int: 1,
inner_property_boolean: false,
}
};
expect(CamelConverter.convert(snakeCase)).toStrictEqual({
id: 1,
propertyString: 'string',
propertyInt: 1,
propertyBoolean: false,
propertyObject: {
innerPropertyString: 'string',
innerPropertyInt: 1,
innerPropertyBoolean: false,
}
})
});
})
})