最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript: how to loop and change key name? - Stack Overflow

programmeradmin5浏览0评论

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"')
发布评论

评论列表(0)

  1. 暂无评论