Javascript 合并复多维数组

Javascript 合并复多维数组,javascript,arrays,Javascript,Arrays,在Javascript中,我创建了一个多维数组,但出于另一个目的,我需要转换它 所以我的数组是这样的 array [ 0 => { "ulStatic": [ 0 => { "day": "2019-03-30 18:30:00" "id": "7" "origin": "intentions" } ] "ulDynamic": [ 0 => { "d

在Javascript中,我创建了一个多维数组,但出于另一个目的,我需要转换它

所以我的数组是这样的

array [
  0 => {
    "ulStatic": [
      0 => {
        "day": "2019-03-30 18:30:00"
        "id": "7"
        "origin": "intentions"
      }
    ]
    "ulDynamic": [
      0 => {
        "day": "2019-03-30 18:30:00"
        "id": "275"
        "origin": "obs"
      }
    ]
    "ulCreatedDynamic": []
  }
  1 => {
    "ulStatic": [
      0 => {
        "day": "2019-03-31 09:30:00"
        "id": "8"
        "origin": "intentions"
      }
    ]
    "ulDynamic": []
    "ulCreatedDynamic": []
  }
  2 => {
    "ulStatic": []
    "ulDynamic": []
    "ulCreatedDynamic": [
      0 => {
        "day": "2019-04-03 19:30:00"
        "id": "277"
        "origin": "obs"
      }
    ]
  }
]
我正在尝试使用这个数组:

array [
  0 => {
    "day": "2019-03-30 18:30:00"
    "elements": [
      0 => {
        "id": "7"
        "origin": "intentions"
      }
      1 => {
        "id": "275"
        "origin": "obs"
      }
    ]
  }
  1 => {
    "day": "2019-03-31 09:30:00"
    "elements": [
      0 => {
        "id": "8"
        "origin": "intentions"
      }
    ]
  }
  2 => {
    "day": "2019-04-03 19:30:00"
    "elements": [
      0 => {
        "id": "277"
        "origin": "obs"
      }
    ]
  }
]
我必须承认,我不知道从哪里开始。我正在寻找map()、splice()、concat(),但它让我感到困惑。 你能帮我提些建议吗


谢谢

您可以通过迭代对象及其数组的值,按
对数据进行分组

var数组=[{ulStatic:[{day:“2019-03-30 18:30:00”,id:“7”,origin:“intentials”}],ulDynamic:[{day:“2019-03-30 18:30:00”,id:“275”,origin:“obs”},ulcreatedddynamic:[},{ulStatic:“2019-03-31 09:30:00”,id:“8”,origin:“intentials:“intentials”},ulDynamic:[],ulDynamic:[],ulCreatedDynamic:[{day:“2019-04-03 19:30:00”,id:“277”,来源:“obs”}]},
结果=数组。减少((r,o)=>{
对象
.价值观(o)
.forEach(a=>a.forEach({day,id,origin})=>{
var temp=r.find(p=>day==p.day);
if(!temp)r.push(temp={day,元素:[]});
临时元素推送({id,origin});
}));
返回r;
}, []);
控制台日志(结果)
.as控制台包装{最大高度:100%!重要;顶部:0;}
let originalArr=[{
超静定:[
{
日期:“2019-03-30 18:30:00”,
id:'7',
来源:“意图”
}
],
ulDynamic:[
{
日期:“2019-03-30 18:30:00”,
id:'275',
来源:“obs”
}
],
ulCreatedDynamic:[]},{ulStatic:[
{
日期:2019-03-3109:30:00,
id:'8',
来源:“意图”
}
],
ulDynamic:[],
ulCreatedDynamic:[]},{ulStatic:[],,
ulDynamic:[],
ulCreatedDynamic:[
{
日期:2019-04-03 19:30:00,
id:'277',
来源:“obs”
}
]}];
让op=originalArr.map(项=>{
设ulStatic=item.ulStatic.map(ul=>{
返回{
id:ul.id,
原产地:ul原产地
};
});
设ulDynamic=item.ulDynamic.map(ul=>{
返回{
id:ul.id,
原产地:ul原产地
};
});
让ulCreatedDynamic=item.ulCreatedDynamic.map(ul=>{
返回{
id:ul.id,
原产地:ul原产地
};
});
让我们有一天;
如果(ulStatic.length>0){
天=项[0]。天;
}否则如果(ulDynamic.length>0){
天=项。ulDynamic[0]。天;
}否则如果(ulCreatedDynamic.length>0){
天=项。ulCreatedDynamic[0]。天;
}
返回{
天:天,
元素:[].concat(超静态)。concat(超动态)
};
});

控制台日志(op)
对输入进行分组,并使用
减少
返回对象值

常量输入=[{
“超静定”:[{
“日期”:“2019-03-30 18:30:00”,
“id”:“7”,
“起源”:“意图”
}],
“ulDynamic”:[{
“日期”:“2019-03-30 18:30:00”,
“id”:“275”,
“来源”:“obs”
}],
“ulCreatedDynamic”:[]
},
{
“超静定”:[{
“日期”:“2019-03-31 09:30:00”,
“id”:“8”,
“起源”:“意图”,
}],
“ulDynamic”:[],
“ulCreatedDynamic”:[]
},
{
“超静定”:[],
“ulDynamic”:[],
“ulCreatedDynamic”:[{
“日期”:“2019-04-03 19:30:00”,
“id”:“277”,
“来源”:“obs”
}]
}
];
const groupByDay=inputAry.reduce((组,静态)=>{
//展平静力学阵列
[].concat.apply([],Object.values(静态))
弗雷奇先生(({
白天
身份证件
起源
}) => {
//创建以日期为关键字的词典条目,如果已存在,请使用现有条目或创建新条目
组[日]=组[日]|{
白天
要素:[]
};
//将id和原点推送到元素
组[天].elements.push({
身份证件
起源
});
});
返回组;
}, {});
const expectedResult=Object.values(groupByDay);

console.log(expectedResult)列表展平通常是一个reduce()操作,但这似乎是一个映射操作的转换