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