JSFiddle - React, Tailwind, and code Playground

by Jussia

JavaScript

function FormParamsObject(objectParams) {
  this.objectParams = objectParams

  this.getFullObject = function () {
    return this.objectParams
  }

  this.getObjectProperty = function (propPath) {
    return propPath.split('.').reduce(function (object, property) {
      return object !== undefined ? object[property] : null
    }, this.objectParams);
  }

  this.setObjectProperty = function (propPath, value) {
    var keys = propPath.split('.'),
        newObjectParams = this.objectParams;

    for (var i = 0; i < keys.length; i++) {
      if ( (i < keys.length - 1) &&
        (this.objectParams[keys[i]] === undefined || this.objectParams[keys[i]][keys[i + 1]] === undefined)) {
          newObjectParams[keys[i]] = {}
      }
      if (i === keys.length - 1) {
        newObjectParams[keys[i]] = value
      }
      newObjectParams = newObjectParams[keys[i]]
    }
    return value
  }
}

var params = new FormParamsObject(
  {
    param1: 'test1',
    param2: {
      param21: 'test2',
      param22: {
        number: ['123', '456'],
        text: ['text1', 'text2'],
      },
    }
  }
);

// console.log('getFullObject: ', params.getFullObject())
// console.log('getObjectProperty: ', params.getObjectProperty('param2.param21'))
// console.log('convertObjectToArray: ', params.convertObjectToArray('param2.param22'))
console.log('setObjectProperty', params.setObjectProperty('param1', 'new value'))
console.log('setObjectProperty', params.setObjectProperty('param2.param21', 'new value'))
// console.log('setObjectProperty44444', params.setObjectProperty('param1.param11.param33.param44', 'new value2'))
console.log('getFullObject: ', params.getFullObject())