LoginSignup
2
2

More than 3 years have passed since last update.

[JavaScript]オブジェクトのキー名をsnake_caseからlowerCamelCaseに変換する

Last updated at Posted at 2019-05-25

こんな感じで出来るはず。

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,
        }
      })
    });
  })
})

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2