とあるAPIのレスポンスJSONのキーがsnake_caseだが、JavaScript的にはcamelCaseでプロパティアクセスしたいんだよなー、みたいな話を某所で見かけた。
ES2015 Proxyを使って解決してみる。
function toSnakeCase(name) { name = name.replace(/([A-Z]+)([A-Z][a-z])/g, function(_, $1, $2) { return $1 + '_' + $2; }); name = name.replace(/([^A-Z])([A-Z])/g, function(_, $1, $2) { return $1 + '_' + $2; }); return name.toLowerCase(); } var response = { hoge_fuga: "ほげふが" }; var responseProxy = new Proxy(response, { get: function(target, name, receiver) { if (target.name !== undefined) { return target.name; } return target[toSnakeCase(name)]; } }); console.log(responseProxy.hogeFuga);
v8にはproxyが実装されていないのでchromeやnode.jsでは無理。Firefoxならば動作する。Edgeでも動作するらしいがWindows持ってないので未確認