首页 > 解决方案 > 重命名包含子对象的对象中的键

问题描述

我想重命名一个对象中的键,该对象包含看起来相同的子对象。

这是我的起始对象:

objs = {
   "one":{
      "title":"bla",
      "amount":5,
      "children":[
         {
            "title":"bla",
            "identifier":"some text"
         },
         {
            "title":"bla2",
            "identifier":"some text2"
         }
      ]
   },
   "two":{
      "title":"bla",
      "amount":5,
      "children":[
         {
            "title":"bla",
            "identifier":"some text"
         },
         {
            "title":"bla2",
            "identifier":"some text2"
         }
      ]
   }
}

我希望它把它变成这样:

objs = {
   "one":{
      "text":"bla",
      "amount":5,
      "items":[
         {
            "text":"bla",
            "identifier":"some text"
         },
         {
            "text":"bla2",
            "identifier":"some text2"
         }
      ]
   },
   "two":{
      "text":"bla",
      "amount":5,
      "items":[
         {
            "text":"bla",
            "identifier":"some text"
         },
         {
            "text":"bla2",
            "identifier":"some text2"
         }
      ]
   }
}

所以基本上我想将每个键重命名childrenitems和每个键titletext无论对象子对象有多深。我已经尝试spread & Destructuring Assignment在 foreach 循环中使用,但效果不佳..

标签: javascriptjsonecmascript-6

解决方案


也许是这样的:

var objs = {
   "one":{
      "title":"bla",
      "amount":5,
      "children":[
         {
            "title":"bla",
            "identifier":"some text"
         },
         {
            "title":"bla2",
            "identifier":"some text2"
         }
      ]
   },
   "two":{
      "title":"bla",
      "amount":5,
      "children":[
         {
            "title":"bla",
            "identifier":"some text"
         },
         {
            "title":"bla2",
            "identifier":"some text2"
         }
      ]
   }
};



function transorm_obj(_obj){
	var out = [];
	for(var key in _obj){
		var new_obj = {};
		for(var prop in _obj[key]){
		  if(prop == 'children'){
            new_obj['items'] = transorm_obj(_obj[key][prop]);
		  }else if(prop == 'title'){
             new_obj['text'] = _obj[key][prop];
		  }else{
		  	new_obj[prop] = _obj[key][prop];
		  }

        }
        out.push(new_obj);
	}
	return out;
}

console.log(transorm_obj(objs));


推荐阅读