Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何循环和更改键名?_Javascript_For Loop - Fatal编程技术网

Javascript:如何循环和更改键名?

Javascript:如何循环和更改键名?,javascript,for-loop,Javascript,For Loop,如何更改键名但为其值设置键 例如,我存储了以下json数据: { particles: { name: 'particles', values: [ [Object], [Object], [Object], [Object], [Object] ] }, timestamps: { name: 'timestamps', values: [ [Object], [Object], [Object], [Object], [Object] ] } }

如何更改键名但为其值设置键

例如,我存储了以下json数据:

{ particles: 
   { name: 'particles',
     values: [ [Object], [Object], [Object], [Object], [Object] ] },
  timestamps: 
   { name: 'timestamps',
     values: [ [Object], [Object], [Object], [Object], [Object] ] } 
}
我将循环此输入并更改键:

{ particles: 'particle', timestamps: 'timestamp' }
粒子
更改为
粒子
并将
时间戳
更改为
时间戳

我的尝试:

for (var property in data) {
   stored[data[property]] = stored[property].values;
   stored[property].name = data[property];
}
我只更改了存储数据中的
名称
,但没有更改名称


有什么想法吗?

通过获取旧属性值分配新属性,然后删除旧属性

var数据={
粒子:{
名称:“粒子”,
值:[]
},
时间戳:{
名称:'时间戳',
值:[]
}
}
var newK={
粒子:“粒子”,
时间戳:“时间戳”
};
//获取所有对象键并对其进行迭代
Object.keys(newK).forEach(function(ele){
//基于旧属性值指定对象属性
数据[newK[ele]]=数据[ele];
//更新名称属性
数据[newK[ele]]。名称=newK[ele];
//删除旧对象属性
删除数据[ele];
})

控制台日志(数据)
您可以使用
JSON将
对象
转换为
字符串
。字符串化
,然后替换出现的
粒子
时间戳
str.replace(/particles/g,“particle”)
)。最后,使用
JSON.parse(str)
将字符串转换回
对象

NB:为确保您不会更改除按键以外的任何其他数据:

str.replace(/{"particles":{"name":"particles"/g, '{"particle":{"name":"particle"')

可以通过迭代数据、创建新键和删除旧键来实现

例如


首先必须使用
delete
语句删除键,然后可以使用
defineProperty
方法使用
Object
类的Static方法添加新属性。这里是示例代码

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/>");
}
var data={particles:'particle',timestamp:'timestamp'};
for(数据中的var k){
文件。写入(k+“:“+数据[k]+”
); } if(data.hasOwnProperty(“粒子”)){ 值=数据[“粒子”]; 删除数据[“粒子”]; Object.defineProperty(数据,“粒子”{ 价值:价值, 可写:对, 可枚举:正确, 对,, }); } if(data.hasOwnProperty(“时间戳”)){ 值=数据[“时间戳”]; 删除数据[“时间戳”]; Object.defineProperty(数据,“时间戳”{ 价值:价值, 可写:对, 可枚举:正确, 对,, }); } 文档。写入(“
新值
”); for(数据中的var k){ 文件。写入(k+“:“+数据[k]+”
); }
快乐编码!!!
:)

删除
旧属性,然后添加新属性。正在尝试生成工作解决方案。是否要显示数据中的内容?一个子集就好了。可能是
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/>");
}