简体   繁体   English

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

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

I have a sample json like 我有一个示例JSON

var obj={
    "results":{
        "grade":"A",
        "marks":12
    },
    "data":{
        "name":"sam",
        "gender":"male",
        "age":10
    }
};

Now I want to transform above json to: 现在我想将上面的json转换为:

var obj={
    "results":{
        "grade":"A",
        "marks":12
    },
    "name":"sam",
    "age":10
}

I was using for each loop 我在每个循环中使用

for(var exKey in obj) {
    if(exKey=='data'){
        //replace key data with its value
    }
}

But I was unable to figure out the logic which would do this. 但是我无法弄清楚这样做的逻辑。 So can someone help me here how can I achieve this? 那么有人可以在这里帮助我如何实现这一目标? Thanks for all ur response, But if iam having some complicated json like: 感谢您的所有回复,但是,如果iam具有一些复杂的json,例如:

var obj={
"results":{
    "grade":"A",
     "res":"fail",
    "marks":12
},
"data":{details:{"name":"sam",
                 "gender":"male",
                  "age":10
                }
 },
 "feespaid":"yes",
 "joindate":"sunday"

}; };

Now if I want to modify or delete some keys inside a key value,some thing like 现在,如果我想修改或删除键值中的某些键,例如

var obj={
"results":{
    "grade":"A",
    "marks":12
},
"data":{details:{"name":"sam",
                  "age":10
                }
 },
 "joindate":"sunday"
 };

So how we go inside the json and delete 那么我们如何进入json并删除

Use inner for-in loop and use bracket-notation to assign variable as key of object 使用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); 

Edit: Only to delete few keys from Object , use delete keyword 编辑:仅从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); 

One way to do this without using a loop: 一种不使用循环的方法:

obj.name = obj.data.name;
obj.age = obj.data.age;
delete obj.data;

Another way using a for-in loop: 使用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

Snippet: 片段:

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

(I need to investigate the solution below a bit more) EDIT: Deleting nested properties could be done like this: (我需要研究下面的解决方案) 编辑:删除嵌套的属性可以这样完成:

 
 
 
  
  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