Javascript 将具有不同长度的深度嵌套JSON对象重新格式化为简化对象数组
如前所述,我使用map reduce函数将多个数据输入合并到单个对象中 接收到的简化对象的格式如下:Javascript 将具有不同长度的深度嵌套JSON对象重新格式化为简化对象数组,javascript,node.js,javascript-objects,Javascript,Node.js,Javascript Objects,如前所述,我使用map reduce函数将多个数据输入合并到单个对象中 接收到的简化对象的格式如下: { "2019-04-02T00:00:00-04:00": { "2019-04-02T09:00:00-04:00": { "2019-04-02T18:00:00-04:00": { "[MET] L2 - NB": { "attendees": [
{
"2019-04-02T00:00:00-04:00": {
"2019-04-02T09:00:00-04:00": {
"2019-04-02T18:00:00-04:00": {
"[MET] L2 - NB": {
"attendees": [
"Lex Luthor",
"Lois Lane"
]
},
"[MET] L2 - CS": {
"attendees": [
"General Zod",
"Clark Kent"
]
}
}
}
},
"2019-04-03T00:00:00-04:00": {
"2019-04-03T09:00:00-04:00": {
"2019-04-03T18:00:00-04:00": {
"[MET] L2 - NB": {
"attendees": [
"Lex Luthor",
"Lois Lane"
]
},
"[MET] L2 - CS": {
"attendees": [
"General Zod",
"Clark Kent"
]
}
}
}
}
}
但是,我正在寻找一种方法,将其重新格式化为一个对象数组,从而允许迭代对象并轻松访问所有数据:
[
{
Date: "2019-04-02T00:00:00-04:00",
StartTimeLocalized: "2019-04-02T09:00:00-04:00",
EndTimeLocalized: "2019-04-02T18:00:00-04:00",
LabelWithCompany: "[MET] L2 - NB",
attendees: [
"Lex Luthor",
"Lois Lane"
]
}, {
Date: "2019-04-02T00:00:00-04:00",
StartTimeLocalized: "2019-04-02T09:00:00-04:00",
EndTimeLocalized: "2019-04-02T18:00:00-04:00",
LabelWithCompany: "[MET] L2 - CS",
attendees: [
"General Zod",
"Clark Kent"
]
},
{
Date: "2019-04-03T00:00:00-04:00",
StartTimeLocalized: "2019-04-03T09:00:00-04:00",
EndTimeLocalized: "2019-04-03T18:00:00-04:00",
LabelWithCompany: "[MET] L2 - CS",
attendees: [
"Lex Luthor",
"Lois Lane"
]
},
{
Date: "2019-04-03T00:00:00-04:00",
StartTimeLocalized: "2019-04-03T09:00:00-04:00",
EndTimeLocalized: "2019-04-03T18:00:00-04:00",
LabelWithCompany: "[MET] L2 - CS",
attendees: [
"General Zod",
"Clark Kent"
]
}
]
您可以有4层嵌套循环,并将结果推送到数组中。要映射到一个对象,您可以使用
object.entries
以数组的形式获取每个级别的键值对
var obj={
“2019-04-02T00:00:00-04:00”:{
“2019-04-02T09:00:00-04:00”:{
“2019-04-02T18:00:00-04:00”:{
“[MET]L2-NB”:{
“与会者”:[
“Lex Luthor”,
“露易丝巷”
]
},
“[MET]L2-CS”:{
“与会者”:[
“佐德将军”,
“克拉克肯特”
]
}
}
}
},
“2019-04-03T00:00:00-04:00”:{
“2019-04-03T09:00:00-04:00”:{
“2019-04-03T18:00:00-04:00”:{
“[MET]L2-NB”:{
“与会者”:[
“Lex Luthor”,
“露易丝巷”
]
},
“[MET]L2-CS”:{
“与会者”:[
“佐德将军”,
“克拉克肯特”
]
}
}
}
}
}
常数res=[];
Object.entries(obj.forEach)([date,value])=>{
Object.entries(value).forEach([start,value2])=>{
Object.entries(value2.forEach)([end,value3])=>{
Object.entries(value3.forEach)([label,value4])=>{
再推({
日期:日期:,
开始局部化:开始,
EndTimeLocalized:结束,
LabelWithCompany:label,
与会者:value4.与会者
})
})
})
})
})
console.log(res)
const obj={
“2019-04-02T00:00:00-04:00”:{
“2019-04-02T09:00:00-04:00”:{
“2019-04-02T18:00:00-04:00”:{
“[MET]L2-NB”:{
“与会者”:[
“Lex Luthor”,
“露易丝巷”
]
},
“[MET]L2-CS”:{
“与会者”:[
“佐德将军”,
“克拉克肯特”
]
}
}
}
},
“2019-04-03T00:00:00-04:00”:{
“2019-04-03T09:00:00-04:00”:{
“2019-04-03T18:00:00-04:00”:{
“[MET]L2-NB”:{
“与会者”:[
“Lex Luthor”,
“露易丝巷”
]
},
“[MET]L2-CS”:{
“与会者”:[
“佐德将军”,
“克拉克肯特”
]
}
}
}
}
};
常量getObjecta=(对象,val)=>{
常数a={},b={};
a、 日期=val;
b、 日期=val;
a、 StartTimeLocalized=Object.keys(对象)[0];
b、 StartTimeLocalized=Object.keys(对象)[0];
a、 EndTimeLocalized=Object.keys(Object[a.StartTimeLocalized])[0];
b、 EndTimeLocalized=Object.keys(对象[b.StartTimeLocalized])[0];
a、 LabelWithCompany='[MET]L2-NB';
b、 LabelWithCompany='[MET]L2-CS';
a、 与会者=对象[a.StartTimeLocalized][a.EndTimeLocalized]['[MET]L2-NB']['Attendes'];
b、 与会者=对象[b.StartTimeLocalized][b.EndTimeLocalized]['MET]L2-CS']['Attendes'];
返回[a,b];
};
设finalArray=[];
Object.keys(obj.forEach)(val)=>{
finalArray=[…finalArray,…getObjecta(obj[val],val)];
});
控制台日志(finalArray)代码>您可以采用一种动态方法,通过移交嵌套键数组并获取新对象的所有键
函数映射嵌套对象(对象、键){
函数getNested(源、目标、索引){
Object.entries(source.forEach)([key,value])=>{
如果(索引+1<键长度){
getNested(值,{…目标,[keys[index]]:key},index+1);
}否则{
push({…目标,[键[索引]]:键,…值});
}
});
}
var结果=[];
getNested(对象,{},0);
返回结果;
}
var object={“2019-04-02T00:00:00-04:00”:{“2019-04-02T09:00:00-04:00”:{“2019-04-02T18:00:00-04:00”:{“[MET]L2-NB:{”与会者:[“Lex Luthor”,“Lois Lane”},[MET]L2-CS:{与会者:[“将军佐德”,“克拉克肯特”}}},2019-04-03T00:00:00-04:00:{“2019 04-039:00-039:00-T104:00”:{与会者:[“Lex Luthor”,“Lois Lane”]},[大都会]L2-CS:{与会者:[“Zod将军”,“Clark Kent”]},
键=[“日期”、“开始时间本地化”、“结束时间本地化”、“LabelWithCompany”],
结果=映射嵌套对象(对象、键);
console.log(结果);
。作为控制台包装{最大高度:100%!重要;顶部:0;}