snake_caseなプロパティにcamelCaseでアクセス

とある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持ってないので未確認