3

How can I change key name but key its values?

For instance I have this json data that I have stored:

{ particles: 
   { name: 'particles',
     values: [ [Object], [Object], [Object], [Object], [Object] ] },
  timestamps: 
   { name: 'timestamps',
     values: [ [Object], [Object], [Object], [Object], [Object] ] } 
}

And I will loop this input and change the key:

{ particles: 'particle', timestamps: 'timestamp' }

Change particles to particle and timestamps to timestamp

My attemp:

for (var property in data) {
   stored[data[property]] = stored[property].values;
   stored[property].name = data[property];
}

I only managed to change the name's value inside the stored data but not the key name...

Any ideas?

Run
  • 54,938
  • 169
  • 450
  • 748

4 Answers4

5

Assign new property by getting old property value and then delete old property.

var data = {
  particles: {
    name: 'particles',
    values: []
  },
  timestamps: {
    name: 'timestamps',
    values: []
  }
}

var newK = {
  particles: 'particle',
  timestamps: 'timestamp'
};

// get all object keys and iterate over them
Object.keys(newK).forEach(function(ele) {
  // assign object property based on old property value
  data[newK[ele]] = data[ele];
  // update name property
  data[newK[ele]].name = newK[ele];
  // delete old object property
  delete data[ele];
})

console.log(data);
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188
1

You can achieve it by iterating the data and create the new keys and delete the old ones.

E.g.

var data = {
    particles: {
        name: 'particles',
        values: [ [Object], [Object], [Object], [Object], [Object] ]
    },
    timestamps: {
        name: 'timestamps',
        values: [ [Object], [Object], [Object], [Object], [Object] ]
    } 
};

var res = { particles: 'particle', timestamps: 'timestamp' };

for (var k in res) {
    var newValue = res[k];
    data[newValue] = data[k];
    data[newValue].name = newValue;
    delete data[k];
}
choz
  • 17,242
  • 4
  • 53
  • 73
0

You first have to remove the key using the delete statement after that you can add the new property using the Static method of the Object class using the defineProperty method. Here it is sample code.

var data={ particles: 'particle', timestamps: 'timestamp' };

for(var k in data){
    document.write(k+":"+data[k]+"<br/>");
}

if(data.hasOwnProperty("particles")){
    value=data["particles"];
    delete data["particles"];
    Object.defineProperty(data,"particle",{
        value: value,
        writable: true,
        enumerable: true,
        configurable: true,
    });
}

if(data.hasOwnProperty("timestamps")){
    value=data["timestamps"];
    delete data["timestamps"];
    Object.defineProperty(data,"timestamp",{
        value: value,
        writable: true,
        enumerable: true,
        configurable: true,
    });
}

document.write("<br/>new values <br/>");

for(var k in data){
    document.write(k+":"+data[k]+"<br/>");
}

Happy Coding!!! :)

Kalpesh Rajai
  • 2,040
  • 27
  • 39
-1

You can convert your Object to a String using JSON.stringify, then replace any occurrences of particles or timestamps (str.replace(/particles/g, "particle")). Finally, convert your string back to an Object using JSON.parse(str).

NB: to make sure that you will not alter any other data but the keys:

str.replace(/{"particles":{"name":"particles"/g, '{"particle":{"name":"particle"')
Ismail RBOUH
  • 10,292
  • 2
  • 24
  • 36