admin管理员组

文章数量:1323225

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?

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?

Share Improve this question asked Jun 23, 2016 at 5:11 RunRun 57.3k178 gold badges463 silver badges771 bronze badges 4
  • 5 delete the old property then add a new one. – Alexander O'Mara Commented Jun 23, 2016 at 5:13
  • Trying to generate a working solution. Care to show what is in data? a subset will be nice. – Samuel Toh Commented Jun 23, 2016 at 5:18
  • probably a duplicate of stackoverflow./questions/4647817/… – Redu Commented Jun 23, 2016 at 5:18
  • Does this answer your question? JavaScript: Object Rename Key – Heretic Monkey Commented Oct 19, 2022 at 21:28
Add a ment  | 

4 Answers 4

Reset to default 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);

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];
}

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!!! :)

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"')

本文标签: Javascript how to loop and change key nameStack Overflow