Javascript 如何删除对象中的键并替换为其值?
我有一个类似json的示例Javascript 如何删除对象中的键并替换为其值?,javascript,json,Javascript,Json,我有一个类似json的示例 var obj={ "results":{ "grade":"A", "marks":12 }, "data":{ "name":"sam", "gender":"male", "age":10 } }; 现在我想将上面的json转换为: var obj={ "results":{ "grade":"A", "mar
var obj={
"results":{
"grade":"A",
"marks":12
},
"data":{
"name":"sam",
"gender":"male",
"age":10
}
};
现在我想将上面的json转换为:
var obj={
"results":{
"grade":"A",
"marks":12
},
"name":"sam",
"age":10
}
我在每个循环中使用
for(var exKey in obj) {
if(exKey=='data'){
//replace key data with its value
}
}
但我无法理解这样做的逻辑。
有人能帮我吗?我该怎么做?
谢谢你的回复,
但是如果我有一些复杂的json,比如:
var obj={
"results":{
"grade":"A",
"res":"fail",
"marks":12
},
"data":{details:{"name":"sam",
"gender":"male",
"age":10
}
},
"feespaid":"yes",
"joindate":"sunday"
})
现在,如果我想修改或删除键值中的一些键,比如
var obj={
"results":{
"grade":"A",
"marks":12
},
"data":{details:{"name":"sam",
"age":10
}
},
"joindate":"sunday"
};
因此,我们如何在json内部删除使用
内部for in
循环,并使用括号表示法将变量指定为对象的键
var obj={
“结果”:{
“等级”:“A”,
“分数”:12分
},
“数据”:{
“姓名”:“山姆”,
“性别”:“男性”,
“年龄”:10岁
}
};
for(obj中的var exKey){
如果(exKey==“数据”){
for(对象数据中的变量d){
如果(d!=‘性别’)对象[d]=对象数据[d];
}
删除对象数据;
}
}
控制台日志(obj)
使用内部进行in
循环,并使用括号符号
将变量
指定为对象的键
var obj={
“结果”:{
“等级”:“A”,
“分数”:12分
},
“数据”:{
“姓名”:“山姆”,
“性别”:“男性”,
“年龄”:10岁
}
};
for(obj中的var exKey){
如果(exKey==“数据”){
for(对象数据中的变量d){
如果(d!=‘性别’)对象[d]=对象数据[d];
}
删除对象数据;
}
}
控制台日志(obj)代码>
(我需要进一步研究下面的解决方案)
编辑:删除嵌套属性的操作如下:
var invalidProperties = ['gender', 'feespaid']; //add more if needed
function recursivelyDeleteProperties(obj) {
for (var key in obj) {
if(invalidProperties.indexOf(key) !== -1) {
delete obj[key];
} else {
recursivelyDeleteProperties(obj[key]);
}
}
}
(我需要进一步研究下面的解决方案)
编辑:删除嵌套属性的操作如下:
var invalidProperties = ['gender', 'feespaid']; //add more if needed
function recursivelyDeleteProperties(obj) {
for (var key in obj) {
if(invalidProperties.indexOf(key) !== -1) {
delete obj[key];
} else {
recursivelyDeleteProperties(obj[key]);
}
}
}
一种不使用循环的方法:
obj.name = obj.data.name;
obj.age = obj.data.age;
delete obj.data;
使用for in循环的另一种方法:
for(item in obj.data) obj[item] = obj.data[item]; // Add items from obj.data to obj
delete obj.gender; // Remove gender
delete obj.data; // Remove obj.data
片段:
var obj={
“结果”:{
“等级”:“A”,
“分数”:12分
},
“数据”:{
“姓名”:“山姆”,
“性别”:“男性”,
“年龄”:10岁
}
};
对于(对象数据中的项目)对象[项目]=对象数据[项目];
删除obj.gender;
删除对象数据;
console.log(obj)
一种不使用循环的方法:
obj.name = obj.data.name;
obj.age = obj.data.age;
delete obj.data;
使用for in循环的另一种方法:
for(item in obj.data) obj[item] = obj.data[item]; // Add items from obj.data to obj
delete obj.gender; // Remove gender
delete obj.data; // Remove obj.data
片段:
var obj={
“结果”:{
“等级”:“A”,
“分数”:12分
},
“数据”:{
“姓名”:“山姆”,
“性别”:“男性”,
“年龄”:10岁
}
};
对于(对象数据中的项目)对象[项目]=对象数据[项目];
删除obj.gender;
删除对象数据;
console.log(obj)
它起作用了。我如何删除该性别键及其值der?@HVarma-我已使用if(d!=“gender”)在提供的代码中删除了gender
,
谢谢..如果我想删除结果键中的分数,我们该怎么办?谢谢Rayon。我发布了错误的json。我在问题中添加了一个新的json。你能看一看吗?帮我解决问题。我如何删除那个性别键及其值der?@HVarma-我已经在提供的代码中使用if(d!=“gender”)
删除了性别,谢谢。。如果我想删除结果键中的分数,我们该怎么办?.谢谢Rayon.我发布了错误的json.我在问题中添加了一个新的..你能看一看吗a help me Out谢谢@Spencer.我共享了错误的json der.我在我的问题下面发布了一个新的json.你能在这方面帮助我吗?谢谢@Spencer.我共享了错误的json der.我在我的问题下面发布了一个新的json der问题。你能帮我吗谢谢你的回复。我错分享了错误的json。我在下面的问题中发布了一个新的json。你能帮我吗that@HVarma现在,看看这是否适合你的问题。谢谢你的回复。我错误地共享了错误的json。我在下面的问题中发布了一个新的json。你能帮我吗that@HVarma现在看,看看这是否适合你的问题。