Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 将具有不同长度的深度嵌套JSON对象重新格式化为简化对象数组_Javascript_Node.js_Javascript Objects - Fatal编程技术网

Javascript 将具有不同长度的深度嵌套JSON对象重新格式化为简化对象数组

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": [

如前所述,我使用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": [
                        "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;}