繁体   English   中英

如何删除对象中的键并替换为其值?

[英]How to delete key in object and replace with its value?

我有一个示例JSON

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

但是我无法弄清楚这样做的逻辑。 那么有人可以在这里帮助我如何实现这一目标? 感谢您的所有回复,但是,如果iam具有一些复杂的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并删除

使用inner for-in循环并使用bracket-notationvariable分配为object key

 var obj = { "results": { "grade": "A", "marks": 12 }, "data": { "name": "sam", "gender": "male", "age": 10 } }; for (var exKey in obj) { if (exKey == 'data') { for (var d in obj.data) { if (d != 'gender') obj[d] = obj.data[d]; } delete obj.data; } } console.log(obj); 

编辑:仅从Object删除一些keys ,请使用delete关键字

 var obj = { "results": { "grade": "A", "res": "fail", "marks": 12 }, "data": { details: { "name": "sam", "gender": "male", "age": 10 } }, "feespaid": "yes", "joindate": "sunday" }; delete obj.results.res; delete obj.data.details.gender; delete obj.feespaid; 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={ "results":{ "grade":"A", "marks":12 }, "data":{ "name":"sam", "gender":"male", "age":10 } }; for(item in obj.data) obj[item] = obj.data[item]; delete obj.gender; delete obj.data; console.log(obj) 

for (var exKey in obj) {
    if(exKey=='data') {
        for (var dataKey in obj[exKey]) {
           obj[dataKey] = obj[exKey][dataKey];
        }
        delete obj[exKey];
    }
}

(我需要研究下面的解决方案) 编辑:删除嵌套的属性可以这样完成:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM