Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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/3/sockets/2.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_Json_Ecmascript 6 - Fatal编程技术网

Javascript 重命名包含子对象的对象中的键

Javascript 重命名包含子对象的对象中的键,javascript,json,ecmascript-6,Javascript,Json,Ecmascript 6,我想重命名对象中的键,该对象包含外观相同的子对象 这是我的出发点: objs = { "one":{ "title":"bla", "amount":5, "children":[ { "title":"bla", "identifier":"some text" }, { "title":"bla2",

我想重命名对象中的键,该对象包含外观相同的子对象

这是我的出发点:

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

因此,基本上我想将每个键
子项
重命名为
,并将每个键
标题
重命名为
文本
,无论对象子项的深度如何。我已经尝试在foreach循环中使用
展开和分解赋值
,但效果不太好。

所以您想将
子项
重命名为
?这里有一个选项,使用
for in
循环“重命名”您的属性

const objs={
“一”:{
“标题”:“bla”,
“金额”:5,
“儿童”:[
{
“标题”:“bla”,
“标识符”:“某些文本”
},
{
“标题”:“bla2”,
“标识符”:“某些文本2”
}
]
},
“二”:{
“标题”:“bla”,
“金额”:5,
“儿童”:[
{
“标题”:“bla”,
“标识符”:“某些文本”
},
{
“标题”:“bla2”,
“标识符”:“某些文本2”
}
]
}
};
用于(对象中的常量对象){
objs[obj]。items=objs[obj]。子项;
删除objs[obj].项;
}

console.log(objs)无法重命名,但可以按如下方式重新分配值:

Object.keys(objs)
    .filter(key => objs[key].children)
    .forEach(key => { 
        objs[key].items = objs[key].children; 
        delete objs[key].children; 
    });
也许是这样:

var objs={
“一”:{
“标题”:“bla”,
“金额”:5,
“儿童”:[
{
“标题”:“bla”,
“标识符”:“某些文本”
},
{
“标题”:“bla2”,
“标识符”:“某些文本2”
}
]
},
“二”:{
“标题”:“bla”,
“金额”:5,
“儿童”:[
{
“标题”:“bla”,
“标识符”:“某些文本”
},
{
“标题”:“bla2”,
“标识符”:“某些文本2”
}
]
}
};
函数transorm_obj(_obj){
var out=[];
用于(var键输入_obj){
var new_obj={};
用于(变量属性在对象[key]中){
如果(prop==‘children’){
新建对象['items']=转换对象(_obj[key][prop]);
}否则如果(prop=='title'){
新的对象['text']=[key][prop];
}否则{
新建对象[prop]=[key][prop];
}
}
向外推(新_obj);
}
返回;
}

console.log(transorm_obj(objs))这里是我在中编写的一个通用递归
map
函数-

const map=(fk=identity,fv=identity,x=null)=>
数组.isArray(x)
? x、 映射(v=>map(fk,fv,v))
:对象(x)==x
? Object.fromEntries(
Object.entries(x.map)([k,v])=>
[fk(k)
,地图(fk,fv,v)
] 
)
)
:fv(x)
高阶函数特别有用,因为它们可以以许多实际方式使用-

constKeyReplacer=(k=”“)=>
{if(k==“title”)返回“text”
如果(k==“子项”)返回“项”
否则返回k
}
常量objs=//
{if(k==“title”)返回“text”
如果(k==“子项”)返回“项”
否则返回k
}
常数结果=
映射(密钥替换、标识、objs)

console.log(result)
请访问,查看和。做一些研究,搜索相关话题等;如果遇到问题,请发布您的尝试,使用
[]
代码段编辑器记录输入和预期输出。而不仅仅是子项。我希望每个
标题
文本都变成
文本