Replace dot with underscore in js object key names

I need to go through the js object and replace all the dots with underscores in these object keys.
for instance

{a.a:"test"}
to
{a_a:"test"}

This is my code.

Object.getOwnPropertyNames(match).forEach(function(val, idx, array) {
    if(val.indexOf(".") != -1){
       val.replace(/\./g,'_');
    }
});

Thank you, but my problem in the object is not as simple as this

{
"a.a":{
   "nee.cc":"sdkfhkj"
},
"b.b": "anotherProp"
}
+4
source share
5 answers

Create a new object with Array.prototype.reduce()and replace the dot in the attribute names using a simple line replacement without regexp:

function transformKeys(obj) {
  return Object.keys(obj).reduce(function(o, prop) {
    var value = obj[prop];
    var newProp = prop.replace('.', '_');
    o[newProp] = value;
    return o;
  }, {});
}

var result = transformKeys({"a.a":"test", "b.b": "anotherProp"});

console.log(result);
Run code
+1
source

This code can help you solve the problem.

Object.keys(yourObj).forEach(function(v){
    yourObj[v.replace(".", "_")] = yourObj[v];
    delete yourObj[v];
    console.log(yourObj);
});
0
source

, "_", ".".

var transformKeys = obj => {
  result = {};
  Object.keys(obj).forEach(x => {
    var y = x.replace(".", "_");
    result[y] = obj[x];
  });
  return result;
}
console.log(transformKeys({"a.a":"test", "b.b": "anotherProp"}));
// { a_a: 'test', b_b: 'anotherProp' }
0

, .

var obj = {
"a.a":{
   "nee.cc":"sdkfhkj"
},
"b.b": "anotherProp"
};

d_u(obj); // change dot to underscore function

function d_u(obj){
    for(var i in obj) {
        if (typeof obj[i] == "object") d_u(obj[i]);            
            obj[i.replace(/\./g,'_')] = obj[i];            
            delete obj[i];  // delete old object [current]      
    }
}
console.log(obj);
0

Using lodash , here is a function that will recursively replace dots with underscores for each of the keys on the object.

And he added a test to check the results.

function replaceDotWithUnderscore(obj) {
  _.forOwn(obj, (value, key) => {

    // if key has a period, replace all occurences with an underscore
    if (_.includes(key, '.')) {
      const cleanKey = _.replace(key, /\./g, '_');
      obj[cleanKey] = value;
      delete obj[key];
    }

    // continue recursively looping through if we have an object or array
    if (_.isObject(value)) {
      return replaceDotWithUnderscore(value);
    }
  });
  return obj;
}

// --------------------------------------------------
// Run the function with a test to verify results
// -------------------------------------------------

var input = {
  "a.a": {
    "nee.cc": "sdkfhkj"
  },
  "b.b": "anotherProp"
};

var result = replaceDotWithUnderscore(input);

// run a quick test to make sure our result matches the expected results...
var expectedResult = {
  "a_a": {
    "nee_cc": "sdkfhkj"
  },
  "b_b": "anotherProp"
};

console.log(result);
console.assert(_.isEqual(result, expectedResult), 'result should match expected result.');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Run code
0
source

Source: https://habr.com/ru/post/1659608/


All Articles